这题比上次 racebug和我们讲的那个还要恶心~~上次那个一个水拓扑排序就搞定了,这个恶心的一b!!一开始以为数字可以是实数,挖了好久啊,一个下午有木有!!后面发现所有的数字只能是整数。。。整数和实数还是有区别的~~很大的区别!!
PS:vector建图实在爽歪歪~~少年们都来学哥~用vector建图才是王道啊!
#include<iostream>
#include<vector>
#include<string>
#include<queue>
#include<cassert>
#include<algorithm>
#include<iomanip>
using namespace std;
const int maxn=111;
const double eps=1e-8;
struct zz
{
int from;
int to;
int cost;
}zx,tz;
vector<zz>g[maxn];
queue<int>q;
int n,m,si,ni,ki;
int cont[maxn];
int s[maxn];
int now,to;
int temp;
string oi;
bool vis[maxn];
void init()
{
memset(cont,0,sizeof(cont));
memset(vis,false,sizeof(vis));
for(int i=0;i<maxn;i++)
{
g[i].clear();
}
return ;
}
bool spfa()
{
while(!q.empty())
{
q.pop();
}
for(int i=0;i<=n;i++)
{
q.push(i);
vis[i]=true;
s[i]=0;
}
while(!q.empty())
{
now=q.front();
q.pop();
vis[now]=false;
for(int i=0;i<g[now].size();i++)
{
temp = g[now][i].cost + s[now];
to = g[now][i].to;
if(temp > s[to])
{
s[to]=temp;
if(!vis[to])
{
q.push(to);
cont[to]++;
if ( cont[to] > maxn )
{
return false;
}
vis[to]=true;
}
}
}
}
return true;
}
int main()
{
while(cin>>n)
{
if(!n) break;
init();
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>si>>ni>>oi>>ki;
if(oi=="gt")
{
zx.cost=ki;
zx.from=si-1;
zx.to=si+ni;
zx.cost++;
g[si-1].push_back(zx);
}
else
{
zx.cost=-ki;
zx.from=si+ni;
zx.to=si-1;
zx.cost++;
g[zx.from].push_back(zx);
}
}
if(spfa())
{
printf("lamentable kingdom\n");
}
else
{
printf("successful conspiracy\n");
}
}
return 0;
}