- 注意判断重边就好
- 负环能够回去
-
#include<iostream> #include<cstring> using namespace std; #define inf 0x3f3f3f3f #define maxn 555 int mmp[maxn][maxn]; int x,y,z,t,n,w,m; bool floyd() { for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { if(mmp[i][k]+mmp[k][j]<mmp[i][j]) mmp[i][j]=mmp[i][k]+mmp[k][j]; } if(mmp[i][i]<0) return 1; } return 0; } int main() { ios::sync_with_stdio(false); cin>>t; while(t--) { memset(mmp,inf,sizeof(mmp)); cin>>n>>m>>w; for(int i=1; i<=n; i++) mmp[i][i]=0; while(m--) { cin>>x>>y>>z; if(z<mmp[x][y]) { mmp[x][y]=z; mmp[y][x]=z; } } while(w--) { cin>>x>>y>>z; mmp[x][y]=-z; } if(floyd()) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
Wormholes -floyd判断负环
最新推荐文章于 2022-11-07 15:46:49 发布