问你是否存在一个序列 然后满足一段子序列和要等于或者小于k
第一次碰到这个 叫差分约束 听过 现在见识了
转换成最短路 建图 存在负环就说明不存在解
判断负环 Bellman-Ford 或者SPFA
代码好写 关键思路
#includestruct node { int s; int e; int w; }a[2010]; int n,m; int dis[1010]; bool BF() { int i,j,k; int x,y,z; for(i = 0;i <= n + 1; i++) dis[i] = 999999999; dis[0] = 0; for(i = 0;i <= n; i++) { for(j = 0;j < m; j++) { x = a[j].s; y = a[j].e; z = a[j].w; if(dis[y] > dis[x] + z) dis[y] = dis[x] + z; } } for(j = 0;j < m; j++)// 如果松弛了n-1次还能松弛 说明有负环 { x = a[j].s; y = a[j].e; z = a[j].w; if(dis[y] > dis[x] + z) { return false; } } return true; } int main() { int t,i,x,y,z; char str[10]; while(scanf("%d",&n),n) { scanf("%d",&m); for(i = 0;i < m; i++) { scanf("%d %d %s %d",&x,&y,str,&z); if(str[0] == 'g') { a[i].s = x + y + 1; a[i].e = x; a[i].w = - z - 1; } else { a[i].s = x; a[i].e = x + y + 1; a[i].w = z - 1; } } if(BF()) { puts("lamentable kingdom"); } else { puts("successful conspiracy"); } } return 0; }