求负环自然要用 belllman
#include#include int F,n,m,w,p,dist[501];structnode{ int s,e,t;}grid[5500];int bellman(){ int i,k; memset (dist,0,sizeof (dist)); for (k=1;k<=n-1;k++) for(i=1;i<=p;i++) if (dist[ grid[i].s ]> dist[ grid[i].e ]+grid[i].t) dist[ grid[i].s ]=dist[ grid[i].e ]+grid[i].t; for (i=1;i<=p;i++) if (dist[ grid[i].s ]> dist[ grid[i].e ]+grid[i].t) return 1; return 0;}int main(){ int s,e,t; scanf("%d",&F); while (F--) { p=1; memset(grid,0,sizeof(grid)); scanf("%d%d%d",&n,&m,&w); while(m--) { scanf("%d%d%d",&s,&e,&t); grid[p].s=s;grid[p].e=e;grid[p++].t=t; grid[p].s=e;grid[p].e=s;grid[p++].t=t; } while(w--) { scanf("%d%d%d",&s,&e,&t); grid[p].s=s;grid[p].e=e;grid[p++].t=-t; } printf("%s\n",bellman()?"YES":"NO"); } return 0;}