poj 1364—— King(差分约束,spfa)
2013-11-12 20:34
435 查看
/* 差分约束的题目。 先输入n,m, 下面有m组输入,每组4个数据,a,b,c,w; a表示xi的下标i,b表示顺着xi还有有b个 c == "gt",表示> c == "lt" 表示< xi + x(i+1) + ...+ x(i+b) > w or < w s为xi的前n项和. 得s[a+b] - s[a-1] > k or < k 得 s[a+b] - s[a-1] >= k+1 or <= k-1 就可以建图了。 这里还要注意的是spfa的源点不能是0,因为顶点是从0 - n 的。所以,有n+1个点。 在判断负环的时候要>n+1. */ #include<iostream> #include<cstdio> #include<cstring> #include<stack> #include<queue> using namespace std; const int N = 120; typedef struct { int next; int to; int w; }Node; Node edge ; int n,m; int numedge; int head ; void addedge(int a,int b,int w) { edge[numedge].to = b; edge[numedge].w = w; edge[numedge].next = head[a]; head[a] = numedge++; } bool vis ; int dis ; int out ; bool spfa(int start) { stack<int>s; int out ; memset(out,0,sizeof(out)); memset(vis,false,sizeof(vis)); memset(dis,0x3f,sizeof(dis)); s.push(start); vis[start] = true; dis[start] = 0; while(!s.empty()) { int cur = s.top(); s.pop(); out[cur]++; if(out[cur] > n+1) { return false; } for(int i = head[cur] ; i != -1 ; i = edge[i].next) { int x = edge[i].to; if(dis[x] > dis[cur] + edge[i].w) { dis[x] = dis[cur] + edge[i].w; if(!vis[x]) { vis[x] = true; s.push(x); } } } vis[cur] = false; } return true; } int main() { while(scanf("%d",&n) && n) { numedge = 0; scanf("%d",&m); memset(head,-1,sizeof(head)); int a,b,k; char s[3]; for(int i = 0 ; i < m ; i++) { scanf("%d %d %s %d",&a,&b,s,&k); if(s[0] == 'g') { addedge(a-1,a+b,-k-1); } else { addedge(a+b,a-1,k-1); } } for(int i = 0 ; i <= n ; i++) { addedge(n+1,i,0); } if(!spfa(n+1)) { cout<<"successful conspiracy\n"; } else { cout<<"lamentable kingdom\n"; } } return 0; }
相关文章推荐
- POJ1364 HDU1531 King【SPFA】【差分约束】
- POJ 1364 King(差分约束-spfa)
- POJ1364/ZOJ1260 King(差分约束,spfa)
- POJ 1364 King 差分约束 SPFA
- [poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]
- POJ 1364 King (差分约束 + spfa (bellman) 判环)
- [poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]
- [poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]
- poj1364 King(差分约束)
- poj 1364 King(差分约束)
- POJ 1364 King 差分约束 Bellman_Ford
- poj&nbsp;1364&nbsp;King&nbsp;(差分约束)
- POJ 1364 King (差分约束)
- poj 1364 King(差分约束)
- POJ 1364 King【差分约束】
- POJ 1364 King --差分约束第一题
- poj1364——King(差分约束)
- poj 1364 king (差分约束)
- poj 1364 差分约束 SPFA(栈/队列)
- POJ1364[King]--差分约束