poj3259Wormholes

题目链接:http://poj.org/problem?id=3259

用bellman-ford判负环。

 1 #include<cstdio>
 2 #include<cstring>
 3 const int maxn=520;
 4 const int maxe=6000;
 5 const int inf=0x3f3f3f3f;
 6 int t,n,m,w;
 7 int u,v,c;
 8 int dis[maxn];
 9 struct node
10 {
11     int u,v,w,nex;
12 }e[maxe];
13 
14 bool bellman()
15 {
16     int flag=1;
17     for(int i=0;i<=n;i++){
18         dis[i]=inf;
19     }
20         dis[1]=0;
21     for(int i=0;i<n;i++)
22     {
23         flag=0;
24         for(int j=0;j<m;j++)
25             if(dis[e[j].v]>dis[e[j].u]+e[j].w){
26                 dis[e[j].v]=dis[e[j].u]+e[j].w;
27             flag=1;
28         }
29 
30         if(!flag) break;
31         if(i==n-1) return 1;
32 
33     }
34     return 0;
35 
36 }
37 
38 int main()
39 {
40     scanf("%d",&t);
41     while(t--)
42     {
43 
44         scanf("%d%d%d",&n,&m,&w);
45         for(int i=0;i<m;i++)
46         {
47             scanf("%d%d%d",&u,&v,&c);
48             e[i].u=u;
49             e[i].v=v;
50             e[i].w=c;
51             e[i+m].u=v;
52             e[i+m].v=u;
53             e[i+m].w=c;
54         }
55         m<<=1;
56         for(int i=m;i<w+m;i++)
57         {
58             scanf("%d%d%d",&u,&v,&c);
59             e[i].u=u;
60             e[i].v=v;
61             e[i].w=-c;
62         }
63         m+=w;
64         if(bellman()) puts("YES");
65         else puts("NO");
66     }
67 }

 

posted @ 2017-03-25 09:06  yijiull  阅读(94)  评论(0)    收藏  举报