题目的意思就是就是求问是否存在满足条件的序列.
1 2 gt 0 :就是指 a1 + a2 + a3 > 0; (从1开始加,往后在加两个)
2 2 lt 2 :就是指 a2 + a3 + a4 < 2;
这是一道 差分约束 模板题,这里就不具体说差分约束了.给大家一个博客.
http://fuliang.iteye.com/blog/368214
#include<stdio.h>
#include<string.h>
const int INF = 0x3f3f3f3f;
const int N = 220;
int u[N];
int v[N];
int w[N];
int d[N];
int n,m,num;
bool bellman() {
for (int i = 0 ; i <= n ;i++) {
d[i] = INF;
}
d[0] = 0;
for (int k = 0 ; k < n + 1;k++) {
for (int i = 0 ; i < num ;i++) {
int x = u[i] ;
int y = v[i] ;
if (d[x] < INF && d[x] + w[i] < d[y]) {
d[y] = d[x] + w[i];
}
}
}
for (int i = 0 ; i < num ;i++) {
int x = u[i] ;
int y = v[i] ;
if (d[x] < INF && d[x] + w[i] < d[y]) {
return false;
}
}
return true;
}
int main () {
int a,b,c;
char buf[3];
while(scanf("%d",&n) && n) {
scanf("%d",&m);
num = 0 ;
for (num = 0 ; num < m ; num++) {
scanf("%d%d%s%d",&a,&b,buf,&c);
if (strcmp(buf , "gt") == 0) {
v[num] = a;
u[num] = b + a + 1;
w[num] = -(c + 1);
}
else {
v[num] = b + a + 1;
u[num] = a;
w[num] = c - 1;
}
}
for (int i = 0 ; i < n ;i++ ) {
v[num + i] = i + 1;
u[num + i] = 0;
w[num + i] = 0;
}
num = num + n;
if (bellman()) {
printf("lamentable kingdom\n");
}
else
printf("successful conspiracy\n");
}
}