#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <cstring>
#define N 105
#define M 10000
using namespace std;
const int inf = (-1u >> 1);
int first[N], d[N];
int next[M], u[M], v[M], w[M];
int cnt[N];
bool SPFA(int s, int n)
{
for (int i = 0; i < n; i++)d[i] = inf;
d[s] = 0;
queue<int> q;
memset(cnt, 0, sizeof(cnt));
bool inq[N];
memset(inq, false, sizeof(inq));
q.push(s);
while (!q.empty())
{
int x = q.front();q.pop();
inq[x] = false;
for (int e = first[x]; e != -1; e = next[e])if (d[v[e]] > d[u[e]] + w[e])
{
d[v[e]] = d[u[e]] + w[e];
if (!inq[v[e]])
{
inq[v[e]] = true;
q.push(v[e]);
if (++cnt[v[e]]>= n) return 0;
}
}
}
return 1;
}
int main()
{
int n, m;
//FILE* fp = fopen("in.txt", "r");
while (scanf( "%d", &n) != EOF && n)
{
scanf( "%d", &m);
char tt[4];
int a, b, c;
int e = 0;
for (int i = 0;i <= n + 1; i++)first[i] = -1;
for (int i = 1;i <= n + 1; i++)
{
next[e] = first[0];
first[0] = e;
w[e] = 0;
u[e] = 0, v[e] = i;
e++;
}
for (int i = 0; i < m; i++)
{
scanf( "%d %d %s %d", &a, &b, tt, &c);
b = b + a + 1;
if (tt[0] == 'g')
{
a^=b, b^= a, a^= b;
c *= (-1);
}
c--;
next[e] = first[a];
first[a] = e;
w[e] = c;
u[e] = a, v[e] = b;
e++;
}
if (SPFA(0, n + 2))puts("lamentable kingdom");
else puts("successful conspiracy");
//getchar();
}
return 0;
}
Poj _1364 King(差分约束#2)
最新推荐文章于 2017-10-12 19:04:36 发布