HDU 3666 THE MATRIX PROBLEM 差分约束
来源:互联网 发布:阿里云备份 编辑:程序博客网 时间:2024/06/07 15:07
http://acm.hdu.edu.cn/showproblem.php?pid=3666
题目大意:
给你个N*M的矩阵,问是否存在一个序列a[1……N]和b[1……m],使得矩阵中的每个元素L<=C[i][j] * a[i] /b[j]<=U
思路:
对于这种不等式有没有解的,可以想到差分约束。。。。。
L<=C[i][j] * a[i] /b[j]<=U 变形为
L/C[i][j] <=a[i] /b[j]<=U /C[i][j]
两边取对数得:
log(L/C[I][J] )<=log(a[i])-log(b[j])<=log(UC[I][J] )
然后就是建图啦~
敲完代码后TLE。。。百度之,看是否负环判断人家是开了个根号。。。。
改了。。
无数次WA。。。。
检查老半天发现是dis数组我写int.....给我个豆腐好吗。。
改成double就AC了(queue(sqrt(n+m) 800MS)
后想起以前卡队列直接用栈过。。然后改了下(仍然是超过n+m)。1900+MS险过。。。。
而stack(sqrt(n+m))500MS。。。。。
#include <cstdio>#include<cstring>#include<stack>#include<cmath>#include <algorithm>using namespace std;const int MAXN=(400<<1)+10;const int MAXM=MAXN*MAXN+10;int n,m;int head[MAXN],len;struct edge{ int to,next; double val; }e[MAXM];void add(int from,int to,double val){ e[len].to=to; e[len].val=val; e[len].next=head[from]; head[from]=len++;}bool spfa(){ bool vis[MAXN]; int cnt[MAXN]; double dis[MAXN]; stack<int> q; int tot=n+m; int num=sqrt(double(n+m+1)); for(int i=0;i<tot;i++) { cnt[i]=1; vis[i]=true; dis[i]=0; q.push(i); } while(!q.empty()) { int cur=q.top(); q.pop(); vis[cur]=false; for(int i=head[cur];i!=-1;i=e[i].next) { int id=e[i].to; if(e[i].val+dis[cur] < dis[id]) { dis[id]=e[i].val+dis[cur]; if(!vis[id]) { if(++cnt[id]>num) return false; q.push(id); vis[id]=true; } } } } return true;}int main (){ double L,U; while(~scanf("%d%d%lf%lf",&n,&m,&L,&U)) { memset(head,-1,sizeof(head)); len=0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { int ci; scanf("%d",&ci); add(i,j+n,log(U/ci)); add(j+n,i,-log(L/ci)); } } if(spfa()) printf("YES\n"); else printf("NO\n"); } return 0;}
3 0
- HDU 3666 THE MATRIX PROBLEM 差分约束系统
- hdu 3666 THE MATRIX PROBLEM 差分约束
- hdu 3666 THE MATRIX PROBLEM【差分约束系统】
- hdu 3666 THE MATRIX PROBLEM(差分约束系统)
- HDU 3666 THE MATRIX PROBLEM (差分约束判负环)
- hdu 3666 THE MATRIX PROBLEM 差分约束系统
- HDU 3666 THE MATRIX PROBLEM 差分约束
- HDU 3666 THE MATRIX PROBLEM (差分约束判负环)
- HDU 3666 THE MATRIX PROBLEM 差分约束
- hdu 3666 THE MATRIX PROBLEM(差分约束,思路)
- HDU 3666 THE MATRIX PROBLEM(差分约束)
- Hdu 3666 THE MATRIX PROBLEM(差分约束)
- hdu 3666 THE MATRIX PROBLEM (差分约束系统)
- hdu 3666 THE MATRIX PROBLEM (差分约束)
- |hdu 3666|差分约束|THE MATRIX PROBLEM
- hdu3666 THE MATRIX PROBLEM --- 差分约束
- THE MATRIX PROBLEM(差分约束)
- hdoj 3666 THE MATRIX PROBLEM 【差分约束】
- 查找之二分查找
- CTreeCtrl与CreateDragImage创建失败
- java入门学习(七)
- 重新编译Nginx指导手册【修复静态编译Openssl的Nginx漏洞 】[Openssl Heartbleed]
- 谁从汽车电子标准中获益
- HDU 3666 THE MATRIX PROBLEM 差分约束
- Fragment使用总结
- mac os x10.9下如何使用git与github
- POJ-2828 Buy Tickets
- Python3.x学习笔记[2.5]灵活使用urllib与re
- java 死锁及解决
- 编程:关于testing和debugging
- Noi2012四川省选day1 喵星球上的点名_(后缀数组) 代码及解析(详细)
- ZOJ 3430 Detect the Virus(AC自动机+字符串转换)