Wormholes

第一次写spfa,写的有点乱,凑合着看吧。

 1 #include<cstdio>

 2 #include<cstring>

 3 #include<cstdlib>

 4 #include<algorithm>

 5 #include<iostream>

 6 #include<queue>

 7 #define MAXN 52000

 8 using namespace std;

 9 const int INF=1<<28;

10 bool vis[MAXN];

11 int head[MAXN];

12 int next[MAXN];

13 int dis[MAXN];

14 struct node

15 {

16     int u,v,w;

17 }p[MAXN];

18 int e,n,m;

19 int cnt[MAXN];

20 void addnode(int u,int v,int w)

21 {

22     p[e].u=u;

23     p[e].v=v;

24     p[e].w=w;

25     next[e]=head[u];

26     head[u]=e++;

27 }

28 bool relax(int u,int v,int w)

29 {

30     if(dis[v]>dis[u]+w)

31     {

32         dis[v]=dis[u]+w;

33         return true;

34     }

35     return false;

36 }

37 bool spfa(int rc)

38 {

39     memset(vis,false,sizeof(vis));

40     memset(cnt,0,sizeof(cnt));

41     for(int i=1;i<=n;i++)

42         dis[i]=INF;

43     dis[rc]=0;

44     vis[rc]=true;

45     queue<int>q;

46     q.push(rc);

47     while(!q.empty()){

48         int pre=q.front();

49         q.pop();

50         vis[pre]=false;

51         for(int i=head[pre];i+1;i=next[i])

52         {

53             if(relax(pre,p[i].v,p[i].w)&&!vis[p[i].v]){

54                 if((++cnt[p[i].v])>n) return false;

55                 q.push(p[i].v);

56                 vis[p[i].v]=true;

57             }

58         }

59     }

60     return true;

61 }

62 int main()

63 {

64     int t,w,ww,u,v;

65     cin>>t;

66     while(t--){

67         memset(head,-1,sizeof(head));

68         memset(next,-1,sizeof(next));

69         e=0;

70         cin>>n>>m>>ww;

71         for(int i=1;i<=m;i++)

72         {

73             cin>>u>>v>>w;

74             addnode(u,v,w);

75             addnode(v,u,w);

76         }

77         for(int i=1;i<=ww;i++)

78         {

79             cin>>u>>v>>w;

80             addnode(u,v,(-1*w));

81         }

82         if(!spfa(1))

83             printf("YES\n");

84         else

85             printf("NO\n");

86     }

87     return 0;

88 }
View Code

 

你可能感兴趣的:(orm)