标签:des style class code java tar
spfa找正环
5 0 1 2 -60 1 3 -60 1 4 20 1 5 0 0 5 0 1 2 20 1 3 -60 1 4 -60 1 5 0 0 5 0 1 2 21 1 3 -60 1 4 -60 1 5 0 0 5 0 1 2 20 2 1 3 -60 1 4 -60 1 5 0 0 -1
hopeless hopeless winnable winnable
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int maxn=211;
vector<int> g[maxn];
int dist[maxn],inq[maxn],cq[maxn];
int vis[maxn],energy[maxn],n;
void dfs(int u)
{
vis[u]=true;
for(int i=0,sz=g[u].size();i<sz;i++)
{
int v=g[u][i];
if(vis[v]) continue;
dfs(v);
}
}
bool spfa()
{
memset(dist,0xcf,sizeof(dist));
memset(inq,0,sizeof(inq));
memset(cq,0,sizeof(cq));
dist[1]=0;
inq[1]=cq[1]=1;
queue<int> q;
q.push(1);
while(!q.empty())
{
int u=q.front(); q.pop();
for(int i=0,sz=g[u].size();i<sz;i++)
{
int v=g[u][i];
int newvalue=dist[u]+energy[v];
if(newvalue>-100)
if(dist[v]<newvalue)
{
dist[v]=newvalue;
if(inq[v]==0)
{
inq[v]=1;
cq[v]++;
if(cq[v]>=n)
{
memset(vis,0,sizeof(vis));
dfs(v);
if(vis[n]) return true;
continue;
}
q.push(v);
}
}
}
inq[u]=0;
}
if(dist[n]>-100) return true;
return false;
}
int main()
{
int a,b,c;
while(scanf("%d",&n)!=EOF&&~n)
{
for(int i=1;i<=n;i++)
{
g[i].clear();
scanf("%d",energy+i);
scanf("%d",&a);
for(int j=1;j<=a;j++)
{
scanf("%d",&b);
g[i].push_back(b);
}
}
if(spfa()) puts("winnable");
else puts("hopeless");
}
return 0;
}
HDOJ 1317 XYZZY,布布扣,bubuko.com
标签:des style class code java tar
原文地址:http://blog.csdn.net/ck_boss/article/details/25406817