poj 3259 Wormholes(spfa)
#include
#include
#include
#include
using namespace std;
const int inf=0x3f3f3f3f;
const int N=1024;
struct node
{
int to;
int w;
node *next;
};
node* edge[N];
int n,m,w,cnt[N],vis[N],dist[N];
queueq;
int spfa(int v0)
{
while(!q.empty()) q.pop();
int i,u;
node *ptr;
for(i=1; in) return 1;
ptr=edge[u];
while(ptr!=NULL)
{
if(dist[ptr->to]>dist[u]+ptr->w)
{
dist[ptr->to]=dist[u]+ptr->w;
if(vis[ptr->to]==0)
{
vis[ptr->to]=1;
cnt[ptr->to]++;
q.push(ptr->to);
}
}
ptr=ptr->next;
}
}
return 0;
}
int main()
{
int _,i,u,v,t,flag;
node* temp;
scanf("%d",&_);
while(_--)
{
scanf("%d%d%d",&n,&m,&w);
for(i=1; ito=v;
temp->w=t;
temp->next=NULL;
if(edge[u]==NULL)
{
edge[u]=temp;
}
else
{
temp->next=edge[u];
edge[u]=temp;
}
temp=new node;
temp->to=u;
temp->w=t;
temp->next=NULL;
if(edge[v]==NULL)
{
edge[v]=temp;
}
else
{
temp->next=edge[v];
edge[v]=temp;
}
}
for(i=0; ito=v;
temp->w=-t;
temp->next=NULL;
if(edge[u]==NULL)
{
edge[u]=temp;
}
else
{
temp->next=edge[u];
edge[u]=temp;
}
}
flag=spfa(1);
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}