POJ 2983 Is the Information Reliable(差分约束系统)
2010-07-26 15:22
441 查看
//差分约束系统 //这题比较对差分约束的构图比较直观 //eg.P 3 1 4 //4 =< s3 - s1 <= 4-----------(1) //等价于 s3 - s1 <= 4--------(2) // s1 - s3 <= -4-------(3) //V 4 5 //s4 - s5 >= 1 --------------(4) //等价于 s5 - s4 <= -1-------(5) //建立(2)(3)(5)的边就可以了,建立<=的差分系统,就必须求最短路,反之求最长路 //只与信息是否可靠,就是判断图中是否存在负权回路即可 //下面代码为SPFA做法 #include<iostream> #include<queue> #define INF 1000000000 #define MAX 1005 #define MAXM 210000//注意边数的数量,最坏情况2*M+1000(超级源点的边) using namespace std; int head[MAX],V[MAXM],next[MAXM],W[MAXM]; bool inq[MAX]; int cnt[MAX],dis[MAX]; int m,N,M; char cmd; int u,v,w; void addEdge(int u,int v,int w)//添加边 { V[m] = v; W[m] = w; next[m] = head[u]; head[u] = m++; } void buildGrapth()//构图函数 { m = 0; memset(head,-1,sizeof(head)); for(int i = 1;i <= N;++i) addEdge(0,i,0); while(M--) { scanf("/n%c",&cmd); if(cmd == 'P') { scanf("%d%d%d",&u,&v,&w); addEdge(v,u,w); addEdge(u,v,-w); } else { scanf("%d%d",&u,&v); addEdge(u,v,-1); } } } bool SPFA() { memset(inq,0,sizeof(inq)); memset(cnt,0,sizeof(cnt)); queue<int> q; for(int i = 1;i <= N;++i) dis[i] = INF; dis[0] = 0; q.push(0); inq[0] = 1; while(!q.empty()) { int u = q.front(); q.pop(); inq[u] = 0; for(int e = head[u];e != -1;e = next[e]) { if(dis[u] + W[e] < dis[V[e]]) { dis[V[e]] = dis[u] + W[e]; if(!inq[V[e]]) { q.push(V[e]); inq[V[e]] = 1; if(++cnt[V[e]] > N) return 0;//通过元素入队次数判断是否存在回路 } } } } return 1; } int main() { //freopen("in.txt","r",stdin); while(scanf("%d%d",&N,&M) != EOF) { buildGrapth(); if(SPFA()) printf("Reliable/n"); else printf("Unreliable/n"); } return 0; }
相关文章推荐
- POJ 2983 Is the Information Reliable?(差分约束系统)
- POJ 2983 Is the Information Reliable?(差分约束系统)
- POJ 2983 Is the Information Reliable? [ 差分约束系统 spfa]
- POJ 2983 Is the Information Reliable?(差分约束系统+BellmanFord)
- 【POJ 2983】Is the Information Reliable?(差分约束系统)
- 【POJ 2983】Is the Information Reliable?(差分约束系统)
- POJ 2983-Is the Information Reliable?(差分约束系统)
- POJ 2983 Is the Information Reliable?(差分约束系统)
- 学习笔记----差分约束系统初步 POJ 2983 Is the Information Reliable?
- POJ 2983 Is the Information Reliable? 差分约束系统
- POJ 2983-Is the Information Reliable?(差分约束系统)
- 学习笔记----差分约束系统 POJ 2983 Is the Information Reliable?
- POJ 2983 Is the Information Reliable?(差分约束系统)
- poj 2983 Is the Information Reliable?
- POJ 2983 Is the Information Reliable? 差分约束
- POJ 2983-Is the Information Reliable
- [POJ]2983 Is the Information Reliable? 差分约束判有无解(判负环)
- POJ 2983 Is the Information Reliable? (差分约束)
- poj 2983 Is the Information Reliable? (差分约束)
- POJ 2983 Is the Information Reliable?