hdu 1317 坑爹的数据!!hdu。。。你赢了。。。

来源:互联网 发布:新闻小偷源码 编辑:程序博客网 时间:2024/06/05 12:00
/*****************************************************************************                    盗版sphinx的开头 ~!*****************************************************************************/#include<algorithm>#include<iostream>#include<iomanip>#include<cstring>#include<utility>#include<complex>#include<cstdlib>#include<cassert>#include<bitset>#include<string>#include<vector>#include<cstdio>#include<cctype>#include<limits>#include<cmath>#include<queue>#include<stack>#include<deque>#include<cmath>#include<ctime>#include<list>#include<map>#include<set>using namespace std;#define MID(x,y) ( ( x + y ) >> 1 )#define L(x) ( x << 1 )#define R(x) ( x << 1 | 1 )#define BUG puts("here!!!")#define STOP system("pause")#define LOWBIT(x) ( (x) & ( (x) ^ ( (x) - 1 ) ) )#define CLR(x, k) memset((x), (k), sizeof(x))#define CPY(t, s) memcpy((t), (s), sizeof(s))#define SC(t, s) static_cast<t>(s)#define LEN(s) static_cast<int>( strlen((s)) )#define SZ(s) static_cast<int>( (s).size() )typedef double LF;//typedef long long LL;     //GNU C++//typedef unsigned long long ULL;typedef __int64 LL;     //Visual C++ 2010typedef unsigned __int64 ULL;typedef pair<int, int> PII;typedef pair<LL, LL> PLL;typedef pair<double, double> PDD;typedef map<int, int>::iterator MI;typedef vector<int>::iterator VI;typedef list<int>::iterator LI;typedef set<int>::iterator SI;const int INF_INT = 0x3f3f3f3f;const LL INF_LL = 0x7fffffffffffffffLL;     //15fconst double oo = 10e9;const double eps = 10e-7;const double PI = acos(-1.0);const int inf=0x7fffffff;const int maxn=111;const int maxin=222;     //从22改成222// f**k!!本来我以为22已经足够大了!因为spfa每个点都是平均进出两次的,尼玛hdu的测试数据能让它进出几百次啊!!有木有....vector<int>g[maxn];queue<int>Q;bool vis[maxn];bool see[maxn];bool did[maxn];int num[maxn];int power[maxn];int e[maxn];int n,m,tv,now,tp,start,end;inline void init(){    memset(num,0,sizeof(num));    memset(vis,false,sizeof(vis));    memset(see,false,sizeof(see));    memset(power,-1,sizeof(power));    memset(did,false,sizeof(did));    for(int i=1;i<=n;i++)    {        g[i].clear();    }    return ;}bool spfa(){    while(!Q.empty())    {        Q.pop();    }    Q.push(1);    power[1]= 100 + e[1];    num[1]++;    vis[1]= true;    while (!Q.empty())    {        now = Q.front();        Q.pop();        for (int i=0; i < g[now].size(); i++)        {            tv = g[now][i];            tp = power[now] + e[tv];            if ( tv == n )            {                return true;            }            if ( tp <= 0 )            {                continue;            }            if ( tp > power[tv] )            {                power[tv] = tp;                if ( !vis[tv] && !did[tv])                {                    if ( num[tv] <= maxin )                    {                        Q.push(tv);                        num[tv]++;                        vis[tv]=true;                    }                    else                    {                        if(!did[tv])                        {                            power[tv]=inf;                            Q.push(tv);                            memset(num,0,sizeof(num));                            num[tv]=inf;                            vis[tv]=true;                            did[tv]=true;                        }                    }                }            }        }        vis[now]=false;    }    return false;}int main(){    while(cin>>n)    {        init();        if(n==-1) break;        for(int i=1;i<=n;i++)        {            cin>>e[i]>>m;            for(int j=1;j<=m;j++)            {                cin>>tv;                g[i].push_back(tv);            }        }        if( spfa() )        {            cout<<"winnable"<<endl;        }        else        {            cout<<"hopeless"<<endl;        }    }    return 0;}

原创粉丝点击