WA on #11
查看原帖
WA on #11
965238
Fwio_楼主2023/4/15 11:59

大佬帮忙看看,debug了快1h了QwQ

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N = 4e6 + 10;
int h[N] , e[N << 1] , ne[N << 1] , idx;
int dist[N] , w[N] , cnt[N];
int vis[N];
int T;
int n , m;
void add(int u , int v , int val){
	w[idx] = val;
	e[idx] = v;
	ne[idx] = h[u];
	h[u] = idx++;
}
bool spfa(){
	queue<int> q;
	for(int i = 1;i <= n;i++){
		vis[i] = true;
		q.push(i);
	}
	dist[1] = 0;
	while(!q.empty()){
		int t = q.front();
		q.pop();
		vis[t] = false;
		for(int i = h[t];~i;i = ne[i]){
			int j = e[i];
			if(dist[j] > dist[t] + w[i]){
				dist[j] = dist[t] + w[i];
				if(cnt[j] >= n) return true;
				if(!vis[j]){
					vis[j] = true;
					q.push(j);
					cnt[j] = cnt[t] + 1;
				}
			}
		}
	}
	return false;
}
int main(){
	cin >> T;
	memset(h , -1 , sizeof h);
	memset(dist , 0x3f , sizeof dist);
	memset(vis , 0 , sizeof vis);
	memset(cnt , 0 , sizeof cnt);
	memset(e , 0 , sizeof e);
	memset(ne , 0 , sizeof ne);
	memset(w , 0 , sizeof w);
	while(T--){
		idx = 0;
		cin >> n >> m;
		while(m--){
			int u , v , val;
			cin >> u >> v >> val;
			if(val >= 0) add(u , v , val) , add(v , u , val);
			else add(u , v , val);
		}
		if(spfa()) puts("YES");
		else puts("NO");
		memset(h , -1 , sizeof h);
		memset(dist , 0x3f , sizeof dist);
		memset(vis , 0 , sizeof vis);
		memset(cnt , 0 , sizeof cnt);
		memset(e , 0 , sizeof e);
		memset(ne , 0 , sizeof ne);
		memset(w , 0 , sizeof w);
	}
	return 0;
}
2023/4/15 11:59
加载中...