SPFA WA on #9 求助
查看原帖
SPFA WA on #9 求助
804794
NPCaaabc楼主2023/9/24 21:40
#include<bits/stdc++.h>
#define MAXN 11451
using namespace std;
const int inf = 114514191;
using pii = pair<int,int>;
int dis[MAXN],times[MAXN];
bool vis[MAXN];
vector<pii> G[MAXN];

int n,m;
void init(){
	for(int i=1;i<=n;i++) dis[i] = inf;
	memset(times,0,sizeof times);
	memset(vis,0,sizeof vis);
	for(int i=1;i<=n;i++) G[i].clear();
}
bool SPFA(){
	queue<int> q;
	q.push(1);
	dis[1] = 0;times[1] = 1;
	while(!q.empty()){
		int fro = q.front();
		vis[fro] = 0;
		q.pop();
		for(auto v : G[fro]){
			if(vis[v.second] || dis[v.second] <= dis[fro] + v.first) continue;
			vis[v.second] = 1;q.push(v.second);
			dis[v.second] = dis[fro] + v.first;
			times[v.second] ++;
			if(times[v.second] > n) return true;
		}

	}
	return false;
}
void solve(){
	scanf("%d%d",&n,&m);
	init();
	for(int i=1;i<=m;i++){
		int u,v,w;scanf("%d%d%d",&u,&v,&w);
		if(w >= 0) G[v].push_back(make_pair(w,u));
		G[u].push_back(make_pair(w,v));
	}

	if(SPFA()){
		printf("YES\n");
		return;
	}
	printf("NO\n");
	
}
int main(){
	int t;scanf("%d",&t);
	for(int i=1;i<=t;i++) solve();
	return 0;
}
2023/9/24 21:40
加载中...