求助
查看原帖
求助
1241185
yi105011楼主2024/8/20 16:03

提交记录

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2010;
struct node {
	int v , w;
};
int t , n , m , flag;
vector <node> e[N];
int dis[N] , cnt[N] , vis[N];
queue <int> q;
bool spfa(int n, int s) {
  	memset(dis, 0x3f, (n + 1) * sizeof(int));
  	memset(vis, 0 , sizeof (vis));
  	memset(cnt, 0 , sizeof (cnt));
  	dis[s] = 0, vis[s] = 1;
  	q.push(s);
  	while (!q.empty()) {
	    int u = q.front();
	    q.pop(), vis[u] = 0;
	    for (auto ed : e[u]) {	
     	 	int v = ed.v, w = ed.w;
    	 	if (dis[v] > dis[u] + w) {
    	    	dis[v] = dis[u] + w;
    		    cnt[v] = cnt[u] + 1;  
     	   		if (cnt[v] >= n) return false;
     	   		if (!vis[v]) q.push(v), vis[v] = 1;
      		}
    	}
  	}
  return true;
}
signed main () {
	cin >> t;
	while (t --) {
		cin >> n >> m;
		flag = 1;
		while (m --) {
			int a , b , c;
			cin >> a >> b >> c;
			e[a].push_back ( node {b , c} ) ;
			if (c > 0)
			e[b].push_back ( node {a , c} ) ;
		}
		for (int i = 1;i <= n;i ++) {
			if ( !spfa (n , i) ) {
				cout << "YES\n";
				flag = 0;
				break;
			}
		}
		if ( flag ) cout << "NO\n";
	}
		
	return 0;
}
2024/8/20 16:03
加载中...