问你是否存在一个序列 然后满足一段子序列和要等于或者小于k
第一次碰到这个 叫差分约束 听过 现在见识了
转换成最短路 建图 存在负环就说明不存在解
判断负环 Bellman-Ford 或者SPFA
代码好写 关键思路
#include <stdio.h>
struct 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;
}