求助SPFA90分
查看原帖
求助SPFA90分
236416
_stOrz_楼主2021/10/21 19:39
#include<bits/stdc++.h>
using namespace std;
struct node{
	int to, next, dis;
}k[1000005];
int head[100005], number, n, cnt[100005], dis[100005];
bool vis[100005];
void add(int x, int y, int z){
	k[++number].to = y;
	k[number].dis = z;
	k[number].next = head[x];
	head[x] = number;
}

void SPFA(int x){
	memset(vis, false, sizeof vis);
	memset(cnt, 0, sizeof cnt);
	memset(dis, 0x3f, sizeof dis);
	queue<int>q;
	q.push(x);
	dis[x] = 0; vis[x] = true;
	while(!q.empty()){
		int now = q.front();
		vis[now] = false;
		q.pop();
		for(int i = head[now]; i; i = k[i].next){
			int to = k[i].to, di = k[i].dis;
			if(dis[now] + di < dis[to]){
				dis[to] = dis[now] + di;
				if(++cnt[to] >= n){
					cout << "YES" << "\n";
					return;
				}
				vis[to] = true, q.push(to);
			}	
		}
	}
	cout << "NO" << "\n";
}

int main(){
	int T, m, x, y, z;
	cin >> T;
	while(T--){
		cin >> n >> m;
		memset(head, -1, sizeof head);
		number = 0;
		for(int i = 1; i <= m; i++){
			cin >> x >> y >> z;
			add(x, y, z);
			if(z >= 0) add(y, x, z);
		}
		SPFA(1);
	}
}

嘤嘤嘤

2021/10/21 19:39
加载中...