Bellman-Ford WA#11 90分求助!
查看原帖
Bellman-Ford WA#11 90分求助!
1008513
xiaoshumiao楼主2023/11/29 09:01

记录

#include<cstdio>
using namespace std;
const int MAXN=2005,MAXM=3005,INF=0x3f3f3f3f;
int u[2*MAXM],v[2*MAXM],w[2*MAXM],dis[MAXN];
void bellman_ford(int n,int m) {
  for(int i=1;i<=n;i++)
    dis[i]=INF;
  dis[1]=0;
  for(int i=1;i<n;i++) {
  	bool flag=true;
  	for(int j=1;j<=m;j++) {
  	  if(dis[u[j]]+w[j]<dis[v[j]]) {
  	  	dis[v[j]]=dis[u[j]]+w[j];
  	  	flag=false;
  	  }
  	}
  	if(flag)
  	  break;
  }
}
int main() {
  int t;
  scanf("%d",&t);
  for(int i=1;i<=t;i++) {
  	int n,m,cnt=0;
    scanf("%d %d",&n,&m);
    for(int j=1,a,b,c;j<=m;j++) {
      scanf("%d %d %d",&a,&b,&c);
      cnt++;
      u[cnt]=a;
      v[cnt]=b;
      w[cnt]=c;
      if(c>=0) {
      	cnt++;
      	u[cnt]=b;
      	v[cnt]=a;
      	w[cnt]=c;
      }
    }
    bellman_ford(n,cnt);
    bool flag=false;
    for(int i=1;i<=cnt;i++) {
  	  if(dis[u[i]]+w[i]<dis[v[i]]) {
  	    flag=true;
  	    break;
  	  }
    }
    if(flag)
      printf("YES\n");
    else
      printf("NO\n");
  }
  return 0;
}
2023/11/29 09:01
加载中...