附加点wa
查看原帖
附加点wa
1206518
Nervegas楼主2024/7/12 18:43
#include<bits/stdc++.h>
using namespace std;
const int N = 500010;
struct edge{
	int to;
	int dis;
	edge(int a,int b){
		to = a;
		dis = b;
	}
};
int t;
int n,m,w;
queue<int> que;
vector<edge> g[N];
int dis[N],cnt[N],exist[N];

int spfa(int s){
	memset(cnt,0,sizeof(cnt));
	memset(dis,0x3f,sizeof(dis));
	memset(exist,0,sizeof(exist));
	dis[s] = 0;
	que.push(s);
	exist[s] = 1;
	while(!que.empty()){
		int x = que.front();
		que.pop();
		exist[x] = 0;
		for(int i = 0 ; i < g[x].size() ; i++){
			int y = g[x][i].to;
			int w = g[x][i].dis;
			if(dis[y] > dis[x] + w){
				dis[y] = dis[x] + w;
				cnt[y]++;
				if(cnt[y] > n){
					return 1;
				}
				if(!exist[y]){
					que.push(y);
					exist[y] = 1;
				}
			}
		}
	}
	return 0;
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0);
	cin >> t;
	while(t--){
		cin >> n >> m >> w;
		for(int i = 1; i <= N ; i++){
			g[i].clear(); 
		}
		while(m--){
			int u,v,p;
			cin >> u >> v >> p;
			g[u].push_back(edge(v,p));
			g[v].push_back(edge(u,p));
		}
		while(w--){
			int u,v,p;
			cin >> u >> v >> p;
			g[u].push_back(edge(v,-p));
		}
		if(spfa(1)){
			cout << "YES" << endl;
		}
		else cout << "NO" << endl;
	}
	return 0;
}
2024/7/12 18:43
加载中...