UOJ 654 蟲洞問題

2022-05-25 19:24:12 字數 1282 閱讀 7490

現在有n (1<=n<=500)個點,m(1<=m<=2500)條邊(雙向),代表現在可以走的通路,比如從a到b和從b到a需要花費c時間,現在在地上出現了w (1<=w<=200)個蟲洞(單向),蟲洞的意義就是你從a到b話費的時間是-c(時間倒流,並且蟲洞是單向的),現在問你從某個點開始走,能否回到從前。

第一行乙個整數f,表示測試組數。 (1<=f<=5)

每組資料第一行,三個用空格隔開的正整數,表示 n,m,w

以下m行,每行三個正整數,表示雙向的正常通路的兩個點和所用的時間。

以下w行,每行三個正整數,表示單向的蟲洞的兩個點和倒流的時間。

對於每組資料。輸出no或yes表示是否可以實現回到起點的過去。

2

3 3 1

1 2 2

1 3 4

2 3 1

3 1 3

3 2 1

1 2 3

2 3 4

3 1 8

no

yes

資料規模如題中所述

題解:判負環ooo~

#include#include

#include

#include

#include

#include

#include

typedef

long

long

ll;using

namespace

std;

const

int n=12020

;int

yc,tt,n,m,cnt,x,y,z;

inttot[n],dis[n],vis[n],head[n];

struct

nodee[n];

void add(int u,int v,int

w)queue

q;bool

spfa()

}if(tot[v]>=n) return1;}}

return0;

//if(dis[t]!=0x3f3f3f3f) return dis[t];

//else return -1;

}int

main()

for(int i=1;i<=yc;i++)

if(spfa()==1) printf("

yes\n");

else printf("

no\n");

//cout<}

return

0;