您的位置:首页 > 其它

pku 3259 Wormholes

2010-08-02 17:13 302 查看
Time Limit: 2000MSMemory Limit: 65536K
Total Submissions: 8968Accepted: 3171
本题的意思是说在农场里有wormhole可以是时光倒流,现在给你一个地图,问是否能够运用这些wormhole从而使得当FJ回到原处发点的时候比第一次出发的时候要早。

代码:

#include<stdio.h>
struct node
{
int a,b,t;
}s[6000];
int dist[505],n,m,w;
int relax(int u,int v,int t)
{
if(dist[v]>dist[u]+t)
{
dist[v]=dist[u]+t;
return 1;
}
return 0;
}
int bellman(int v0)
{
int i,j;
for(i=1;i<=n;i++)
dist[i]=0xfffffff;
dist[v0]=0;
int flag;
for(i=1;i<n;i++)
{
flag=0;
for(j=1;j<=2*m+w;j++)
{
if(relax(s[j].a,s[j].b,s[j].t))
{
flag=1;
}
}
if(!flag)
break;
}
for(j=1;j<=2*m+w;j++)
if(relax(s[j].a,s[j].b,s[j].t))
return 1;
return 0;
}
int main()
{
int f,i,a,b,t;
scanf("%d",&f);
while(f--)
{
scanf("%d%d%d",&n,&m,&w);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&t);
s[i].a=a;
s[i].b=b;
s[i].t=t;
s[i+m].a=b;
s[i+m].b=a;
s[i+m].t=t;
}
for(i=1;i<=w;i++)
{
scanf("%d%d%d",&a,&b,&t);
s[m*2+i].a=a;
s[m*2+i].b=b;
s[m*2+i].t=-t;
}
if(bellman(1))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: