hdu 3666 THE MATRIX PROBLEM
差分约束系统。
根据题意,可以写出不等式 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相关推荐
- hdu 3666 THE MATRIX PROBLEM 差分约束系统
题目意思: 一共有n+m个变量.行有那个x1,x2...xn, 列有m个b1 b2 ..bm; 然后保证 aij位置 l<=aij*xi/bj<=r; 解题思路: 对上面这个试子 ...
- hdu 5008 Boring String Problem(后缀数组+rmq)
题目链接:hdu 5008 Boring String Problem 题意: 给你一个字符串,有q个询问,每次询问该字符串所有的子串中字典序第k小的是哪个串,输出位置,如果有多个位置,输出最靠左的那 ...
- Matrix Problem
Matrix Problem 题意: 给你一个n * m的二维数据c,c的每个元素值为0或1 现在要求你构造同样大小的数组a和b,要求c[i][j] =='1'的话,a[i][j] = b[i][j] ...
- HDU.1002 A + B Problem II
原题 HDU.1002 A + B Problem II 分类 杂题·大位整数运算 题意 计算从任意两个长度在1000以内的正整数的和. 输入/输出 要求与格式 输入内容 最开始一行开始输入样例数,对 ...
- HDU.1000 A + B Problem
前言 本人目前大二,目前正值新型肺炎疫情期间,空余时间与其在家里无所事事,倒不如每天刷上一两道算法题.写写解题报告总结总结. 所以每天都写至少一篇题解博客吧,同时也希望全国的疫情能快速消退,加油! 原 ...
- 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 ...
- HDU 5015——233 Matrix
题目:HDU 5015 233 Matrix 题目大意:给出矩阵的第0行(233,2333,23333,-)和第0列a1,a2,- an(n<=10,m<=10^9),给出式子: A[i] ...
- Hdu 3666(差分约束系统)
Hdu 3666 (1)思路: 将不等式化简L<=xij*(ai/bj)<=R L/xij <= ai/bj <= R/xij 将两边开log log(L) - log(xij ...
- 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 ...
最新文章
- 如何在SharePoint2007中实现下拉列表(DropDownList)的级联菜单效果
- Python面向对象---类的基本使用
- 1.1 MySQL OCP 实战环境准备
- jquery数据折叠_通过位折叠缩小大数据
- 58如何调出eclipse左边文件栏
- C++学习之路 | PTA乙级—— 1039 到底买不买 (20 分)(精简)
- java浅度克隆_java对象 深度克隆(不实现Cloneable接口)和浅度克隆
- 不再是顶配专属iPhone 13系列将全系标配LiDAR激光雷达
- Android第四十二期 - 关于微信手势退出Activity的操作
- 伊洛纳登录显示服务器连接中,伊洛纳萌新入坑常见问题汇总
- java 485通讯_JAVA开发工程师 | 广州市三地信息技术有限公司
- 性能测试案例模板 性能测试用例模板 测试案例 性能用例 模板 容我想想之性能测试系列培训...
- 什么是python基础语法?一篇文章让你更加了解python
- 若依前后端分离密码修改成功,登录提示用户名或密码不正确。
- Resin下配置JSP虚拟主机
- 虎牙不想做一家游戏直播公司
- 飞思卡尔imx6q交叉编译工具有关问题
- bootbox.js bootbox.promt()
- Balsamiq Mockups 入门教程
- 【旅游热点】金秋十月 “额济纳胡杨林”登内蒙古景区热度榜首