没有什么新意了,也没有坑点。
#include <iostream>
#include <queue>
#include <stdio.h>
using namespace std;
#define inf 0x7fffffff
struct node {
int to, w, next;
} edge[1005];
int dis[205], head[205], cnt, c[205], n, m;
bool vis[205];
void init() {
cnt = 0;
for (int i = 0; i < 205; i++) {
head[i] = -1;
dis[i] = 0;
}
}
void add(int u, int v, int w) {
edge[cnt].to = v;
edge[cnt].w = w;
edge[cnt].next = head[u];
head[u] = cnt++;
}
bool spfa() {
queue <int> q;
int i;
for (i = 0; i <= n; i++) {
q.push(i);
vis[i] = true;
c[i] = 1;
}
while (!q.empty()) {
int p, t = q.front();
q.pop();
p = head[t];
vis[t] = false;
while (p != -1) {
if (dis[edge[p].to] > dis[t] + edge[p].w) {
dis[edge[p].to] = dis[t] + edge[p].w;
if (!vis[edge[p].to]) {
vis[edge[p].to] = true;
q.push(edge[p].to);
c[edge[p].to]++;
if (c[edge[p].to] > 24) {
return false;
}
}
}
p = edge[p].next;
}
}
return true;
}
int main() {
while (scanf("%d", &n), n) {
scanf("%d", &m);
init();
for (int i = 0; i < m; i++) {
int s, e, w;
char c[5];
cin>>s>>e>>c>>w;
if (c[0] == 'g') {
add(s + e, s - 1, -w - 1);
}
else {
add(s - 1, s + e, w - 1);
}
}
if (!spfa()) {
puts("successful conspiracy");
}
else {
puts("lamentable kingdom");
}
}
return 0;
}