您的位置:首页 > 其它

hdu 1317 XYZZY

2014-04-23 14:48 309 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1317

#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
#define maxn 1001
using namespace std;
const int inf=1<<28;

int dis[maxn];
bool vis[maxn];
int n,m,x;
int a[maxn];
bool g[maxn][maxn];
int cnt[maxn];

bool spfa()
{
queue<int>q;
memset(vis,false,sizeof(vis));
memset(cnt,0,sizeof(cnt));
for(int i=1; i<=n; i++) dis[i]=0;
dis[1]=100;
q.push(1);
vis[1]=true;
while(!q.empty())
{
int u=q.front();q.pop();
vis[u]=false;
if(u==n)
{
return true;
}
if(cnt[u]==n+1)
{
continue;
}
cnt[u]++;
if(cnt[u]==n+1)
{
dis[u]=inf;
}
for(int i=1; i<=n; i++)
{
if(g[u][i])
{
if(dis[i]<dis[u]+a[i]&&(dis[u]+a[i]>0))
{
dis[i]=dis[u]+a[i];
if(!vis[i])
{
vis[i]=true;
q.push(i);
}
}
}
}
}
return false;
}

int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==-1) break;
memset(g,false,sizeof(g));
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
scanf("%d",&m);
for(int j=0; j<m; j++)
{
scanf("%d",&x);
g[i][x]=true;
}
}
if(spfa())
{
printf("winnable\n");
}
else
printf("hopeless\n");
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: