hdu 1531 King

首先吐槽一下这个题目的题意描述,我看了半天才明白。 下标全部都是乱标的!!!!出题者能不能规范一点下标的写法!!!!

差分约束系统

#include<cstdio>

#include<cstring>

#include<cmath>

#include<vector>

#include<queue>

#include<algorithm>

using namespace std;



int n,m,tyu;

const int maxn=111;

const int INF=0x7FFFFFFF;

struct abc

{

    int startt;

    int endd;

    int costt;

} node[maxn];

vector<abc>ljb[maxn];

int ff[maxn],summ[maxn],dist[maxn];



void spfa()

{

    queue<int>Q;

    while(!Q.empty()) Q.pop();

    int i;

    for(i=0; i<=n+5; i++) dist[i]=INF;

    memset(ff,0,sizeof(ff));

    memset(summ,0,sizeof(summ));

    dist[0]=0;

    ff[0]=1;

    Q.push(0);

    while(!Q.empty())

    {

        int hh=Q.front();

        Q.pop();

        summ[hh]++;

        if(summ[hh]>n+1)

        {

            tyu=1;

            break;

        }

        ff[hh]=0;

        for(i=0; i<ljb[hh].size(); i++)

        {

            abc noww;

            noww=ljb[hh][i];

            if(dist[hh]+noww.costt<dist[noww.endd])

            {

                dist[noww.endd]=dist[hh]+noww.costt;

                if(ff[noww.endd]==0)

                {

                    ff[noww.endd]=1;

                    Q.push(noww.endd);

                }

            }

        }

    }

}

int main()

{

    int i,si,ni,ki,tott;

    char oi[5];

    while(~scanf("%d",&n))

    {

        if(n==0) break;

        scanf("%d",&m);

        tott=0;

        for(i=0; i<=n+5; i++) ljb[i].clear();

        for(i=0; i<m; i++)

        {

            scanf("%d%d%s%d",&si,&ni,oi,&ki);

            if(strcmp("lt",oi)==0)

            {

                node[tott].startt=si;

                node[tott].endd=si+ni+1;

                node[tott].costt=ki-1;

                ljb[si].push_back(node[tott]);

                tott++;

            }

            else if(strcmp("gt",oi)==0)

            {

                node[tott].startt=si+ni+1;

                node[tott].endd=si;

                node[tott].costt=-(ki+1);

                ljb[si+ni+1].push_back(node[tott]);

                tott++;

            }

        }

        for(i=1; i<=n+1; i++)

        {

            node[tott].startt=0;

            node[tott].endd=i;

            node[tott].costt=0;

            ljb[0].push_back(node[tott]);

            tott++;

        }

        tyu=0;

        spfa();

        if(tyu==1) printf("successful conspiracy\n");

        else printf("lamentable kingdom\n");

    }

    return 0;

}

 

你可能感兴趣的:(HDU)