King 差分约束系统
来源:互联网 发布:笔记本外置光驱 知乎 编辑:程序博客网 时间:2024/05/16 02:08
/*注意将所有的不等式全都转化成<=的形式,如<1变为<=0.注意建模。即构造不等关系。然后将两端点反向存图。接着就上bellman,果断1A。*/#include <stdio.h>#include <cstring>#define maxn 101struct edge{ int u,v,val;} e[maxn];int dis[maxn];int n,m;bool bellman(int s){ memset(dis,0x7f,sizeof(dis)); dis[0]=0; for(int i=0; i<n; i++) for(int j=0; j<m; j++) if(dis[e[j].u]+e[j].val<dis[e[j].v]) dis[e[j].v]=dis[e[j].u]+e[j].val; for(int j=0; j<m; j++) if(dis[e[j].u]+e[j].val<dis[e[j].v]) return false; return true;}int main(){ while(scanf("%d",&n)==1) { if(n==0) break; scanf("%d",&m); char op[3]; int si,ni,ki; for(int i=0; i<m; i++) { scanf("%d %d %s %d",&si,&ni,op,&ki); if(op[0]=='l') { e[i].u=si-1; e[i].v=si+ni; e[i].val=ki-1; } else { e[i].u=si+ni; e[i].v=si-1; e[i].val=-ki-1; } } if(bellman(0)) printf("lamentable kingdom\n"); else printf("successful conspiracy\n"); } return 0;}