求助pts10
查看原帖
求助pts10
996303
TEMPLATES楼主2025/6/15 22:07
#include<bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;

struct node{
	int y, z;
};

int n, m, dis[N], cnt[N];
bool flag, vis[N];

vector<node>g[N];
queue<int>q;

void solve() {
	bool flag = true;
	cin >> n;
	cin >> m;
	for (int i = 1; i <= m; i++) {
		int u, v, w;
		cin >> u >> v >> w;
		g[u].push_back({v, w});
	}
	memset(dis, 0x3f, sizeof(dis));
	memset(vis, 0 , sizeof(vis));
	memset(cnt, 0, sizeof(cnt));
	dis[1] = 0;
	vis[1] = true;
	q.push(1);
	while(q.size()) {
		int x = q.front();
		vis[x] = false;
		q.pop();
		for (auto k:g[x]) {
			int y = k.y, z = k.z;
			if(dis[x] + z < dis[y]) {
				dis[y] = dis[x] + z;
				cnt[y] ++;
				if(cnt[y] >= n){
					cout << "YES" << endl;
					flag = false;
					return;
				}
				if(!vis[y])q.push(y), vis[y] = true;
			}
		}
	}
	if(flag)cout << "NO" << endl;
}

int main() {
	int _;
	cin >>_;
	while(_--) {
		solve();
	}
	return 0;
}

2025/6/15 22:07
加载中...