差分约束系统。

根据题意,可以写出不等式 L <= (Xij * Ai) / Bj <= U

即 Ai/Bj<=U/Xij和Ai/Bj>=L/Xij

由于差分约束系统是减法。。除法变减法可以用对数来解决。

两个式子两边取对数,可以写成log(Ai)-log(Bj)<=log(U/Xij)和log(Ai)-log(Bj)>=log(L/Xij)

log(Ai)和log(Bj)看作两个节点。编号分别为i和n+j,建立有向图,判断有没有负环存在。

 if(summ[hh]>4){jieguo=0;break;} 这个常数4是看了别人的博客水过去的,还可以用sqrt(入队次数)水过去。。。。正确AC姿势目前还没找到。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;const int maxn=405;
const int INF=0x7fffffff;
int jz[maxn][maxn],tott,jieguo,mm;
struct abc
{int startt;int endd;double costt;
} node[2*maxn*maxn];
vector<abc>ljb[maxn+maxn];
int ff[maxn+maxn],summ[maxn+maxn];
double dist[maxn+maxn];void spfa()
{queue<int>Q;while(!Q.empty()) Q.pop();int i;for(i=0; i<=mm; i++) dist[i]=INF;memset(ff,0,sizeof(ff));memset(summ,0,sizeof(summ));dist[0]=0;ff[0]=1;Q.push(0);while(!Q.empty()){int hh=Q.front();Q.pop();summ[hh]++;if(summ[hh]>4){jieguo=0;break;}ff[hh]=0;for(i=0; i<ljb[hh].size(); i++){abc noww;noww=ljb[hh][i];if(dist[hh]+noww.costt<dist[noww.endd]){dist[noww.endd]=dist[hh]+noww.costt;if(ff[noww.endd]==0){ff[noww.endd]=1;Q.push(noww.endd);}}}}
}
int main()
{int n,m,L,U,i,j;while(~scanf("%d%d%d%d",&n,&m,&L,&U)){tott=1;jieguo=1;mm=n+m;for(i=0; i<=mm; i++) ljb[i].clear();for(i=0; i<n; i++)for(j=0; j<m; j++)scanf("%d",&jz[i][j]);for(i=0; i<n; i++){for(j=0; j<m; j++){node[tott].startt=j+n;node[tott].endd=i;node[tott].costt=log(1.0*U/jz[i][j]);ljb[j+n].push_back(node[tott]);tott++;node[tott].startt=i;node[tott].endd=j+n;node[tott].costt=-log(1.0*L/jz[i][j]);ljb[i].push_back(node[tott]);tott++;}}spfa();if(jieguo==1) printf("YES\n");else printf("NO\n");}return 0;
}

转载于:https://www.cnblogs.com/zufezzt/p/4565759.html

hdu 3666 THE MATRIX PROBLEM相关推荐

  1. hdu 3666 THE MATRIX PROBLEM 差分约束系统

    题目意思: 一共有n+m个变量.行有那个x1,x2...xn,   列有m个b1 b2 ..bm; 然后保证 aij位置    l<=aij*xi/bj<=r; 解题思路: 对上面这个试子 ...

  2. hdu 5008 Boring String Problem(后缀数组+rmq)

    题目链接:hdu 5008 Boring String Problem 题意: 给你一个字符串,有q个询问,每次询问该字符串所有的子串中字典序第k小的是哪个串,输出位置,如果有多个位置,输出最靠左的那 ...

  3. Matrix Problem

    Matrix Problem 题意: 给你一个n * m的二维数据c,c的每个元素值为0或1 现在要求你构造同样大小的数组a和b,要求c[i][j] =='1'的话,a[i][j] = b[i][j] ...

  4. HDU.1002 A + B Problem II

    原题 HDU.1002 A + B Problem II 分类 杂题·大位整数运算 题意 计算从任意两个长度在1000以内的正整数的和. 输入/输出 要求与格式 输入内容 最开始一行开始输入样例数,对 ...

  5. HDU.1000 A + B Problem

    前言 本人目前大二,目前正值新型肺炎疫情期间,空余时间与其在家里无所事事,倒不如每天刷上一两道算法题.写写解题报告总结总结. 所以每天都写至少一篇题解博客吧,同时也希望全国的疫情能快速消退,加油! 原 ...

  6. Problem F: Matrix Problem (III) : Array Practice Time Limit: 1 Sec Memory Limit: 4 MB Submit: 8787

    Problem F: Matrix Problem (III) : Array Practice Time Limit: 1 Sec  Memory Limit: 4 MB Submit: 8787  ...

  7. HDU 5015——233 Matrix

    题目:HDU 5015 233 Matrix 题目大意:给出矩阵的第0行(233,2333,23333,-)和第0列a1,a2,- an(n<=10,m<=10^9),给出式子: A[i] ...

  8. Hdu 3666(差分约束系统)

    Hdu 3666 (1)思路: 将不等式化简L<=xij*(ai/bj)<=R L/xij <= ai/bj <= R/xij 将两边开log log(L) - log(xij ...

  9. HDOJ 1016 HDU 1016 Prime Ring Problem ACM 1016 IN HDU

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1016 题目描述: Prime Ring Problem Time Limit: 4000/2000 ...

最新文章

  1. 如何在SharePoint2007中实现下拉列表(DropDownList)的级联菜单效果
  2. Python面向对象---类的基本使用
  3. 1.1 MySQL OCP 实战环境准备
  4. jquery数据折叠_通过位折叠缩小大数据
  5. 58如何调出eclipse左边文件栏
  6. C++学习之路 | PTA乙级—— 1039 到底买不买 (20 分)(精简)
  7. java浅度克隆_java对象 深度克隆(不实现Cloneable接口)和浅度克隆
  8. 不再是顶配专属iPhone 13系列将全系标配LiDAR激光雷达
  9. Android第四十二期 - 关于微信手势退出Activity的操作
  10. 伊洛纳登录显示服务器连接中,伊洛纳萌新入坑常见问题汇总
  11. java 485通讯_JAVA开发工程师 | 广州市三地信息技术有限公司
  12. 性能测试案例模板 性能测试用例模板 测试案例 性能用例 模板 容我想想之性能测试系列培训...
  13. 什么是python基础语法?一篇文章让你更加了解python
  14. 若依前后端分离密码修改成功,登录提示用户名或密码不正确。
  15. Resin下配置JSP虚拟主机
  16. 虎牙不想做一家游戏直播公司
  17. 飞思卡尔imx6q交叉编译工具有关问题
  18. bootbox.js bootbox.promt()
  19. Balsamiq Mockups 入门教程
  20. 【旅游热点】金秋十月 “额济纳胡杨林”登内蒙古景区热度榜首

热门文章

  1. Hotel California
  2. 第174天:面向对象——公有属性、私有属性和静态属性
  3. Android.mk 配置参数
  4. Webpack 学习记录-02
  5. 阿里云MaxCompute 2019-4月刊
  6. 【原创】分布式之缓存击穿 【原创】自己动手实现静态资源服务器 【原创】自己动手实现JDK动态代理...
  7. 《剑指Offer》题目:树的子结构
  8. 【笔记】web语音相关
  9. 往事并不如烟@武汉 --- 和同事们一起'诈金花’
  10. 如何安装或卸载 Internet Explorer 9?