poj 1364 King
来源:互联网 发布:linux软件 编辑:程序博客网 时间:2024/04/28 06:41
查分约束,题目的条件a[i]+a[i+1]+...a[i+n]<k,那么可以假设a[1]+a[2]+....a[n]=sum[n];那么a[i]+a[i+1]+...a[i+n]=sum[i+n]-sum[i-1]<=k-1(因为都是整数),然后就构成了一个查分约束系统,在用Bellman_ford 去求单源最短路径,只要不存在负权环那么必定有解。。。yxl,fighting。。。#include<stdio.h>int n,m,a,b,c;int map[110][3];int dist[110];char s[3];bool bellman_ford(){ for(int i=0;i<=n;i++) dist[i]=99999999; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(dist[map[j][0]]>dist[map[j][1]]+map[j][2]) dist[map[j][0]]=dist[map[j][1]]+map[j][2]; } for(int j=0;j<m;j++) { if(dist[map[j][0]]>dist[map[j][1]]+map[j][2]) return false; } return true;} int main(){ while(scanf("%d",&n)&&n) { scanf("%d",&m); for(int i=0;i<m;i++) { scanf("%d%d%s%d",&a,&b,s,&c); if(s[0]=='g') { map[i][0]=a-1; map[i][1]=a+b; map[i][2]=-c-1; } else { map[i][0]=a+b; map[i][0]=a-1; map[i][2]=c-1; } } if(bellman_ford()) printf("lamentable kingdom\n"); else printf("successful conspiracy\n"); }return 0;}