bellmen_ford的应用:
Source Code
Problem: 3259 User: yanxiaoli
Memory: 424K Time: 875MS
Language: G++ Result: Accepted
Source Code
#include<stdio.h>
int dis[500];
int road[5300][3];
int t,n,m,w,tot,a,b,len;;
bool bellman()
{
for(int i=0;i<=n;i++)
dis[i]=99999;
dis[1]=0;
for(int i=0;i<=2*m+w;i++)
for(int j=1;j<=2*m+w;j++)
{
if(dis[road[j][0]]>dis[road[j][1]]+road[j][2])
dis[road[j][0]]=dis[road[j][1]]+road[j][2];
}
for(int j=1;j<=2*m+w;j++)
{
if(dis[road[j][0]]>dis[road[j][1]]+road[j][2])
return true;
}
return false;
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&w);
tot=1;
int i;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&len);
road[tot][0]=a;
road[tot][1]=b;
road[tot][2]=len;
tot++;
road[tot][0]=b;
road[tot][1]=a;
road[tot][2]=len;
tot++;
}
for(i=1;i<=w;i++)
{
scanf("%d%d%d",&a,&b,&len);
road[tot][0]=a;
road[tot][1]=b;
road[tot][2]=-1*len;
tot++;
}
if(bellman()) printf("YES\n");
else printf("NO\n");
}
return 0;
}