hdu_1531 还是差分约束

来源:互联网 发布:1024最新 知乎 编辑:程序博客网 时间:2024/05/01 13:41

这题比上次 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;}