求救巨佬
查看原帖
求救巨佬
710862
thrX楼主2024/3/3 14:57

这是CODE

#include<bits/stdc++.h>
using namespace std;
struct edge{
	int v,w;
};
vector<edge> E[115211];
queue<int> q;
int r[115211],d[115211];
bool b[115211];
int t,n,m,s,from,to,va;
edge temp;
void solve(){
	memset(d,0x3f,sizeof(d));
	memset(b,0,sizeof(b));
	memset(r,0,sizeof(r));
	while(!q.empty())q.pop();
	for(int i=1;i<=n;i++)E[i].clear();
	cin>>n>>m;
	s=1;
	for(int i=0;i<m;i++){
		cin>>from>>to>>va;
		temp.v=to,temp.w=va;
		E[from].push_back(temp);
		temp.v=from;
		if(va>=0)E[to].push_back(temp);
	}
	q.push(s);
	b[s]=1,r[s]++,d[s]=0;//起始点入队 
	while(!q.empty()){
		int u=q.front();//队头 
		for(int i=0;i<E[u].size();i++){
			if(d[u]+E[u][i].w<d[i]){//松弛 
				d[i]=d[u]+E[u][i].w;
				if(!b[i]){
					b[i]=1,q.push(i),r[i]++;//入队 
					if(r[i]>n-1){//负环 
						cout<<"YES"<<'\n';
						return ;
					}
				}
			}
		}
		for(int i=1;i<=n;i++){
			cout<<d[i]<<' ';
		}
		cout<<'\n';
		q.pop();
	}
	cout<<"NO"<<'\n';
	return ;
}
int main(){
	
	cin>>t;
	while(t--){
		solve();
	}
	
	return 0;
}
/*
2
3 4
1 2 2
1 3 4
2 3 1
3 1 -3
3 3
1 2 3
2 3 4
3 1 -8
*/

这是结果

2
3 4
1 2 2
1 3 4
2 3 1
3 1 -3
0 1061109567 1061109567
0 1061109567 1061109567
NO
3 3
1 2 3
2 3 4
3 1 -8
0 1061109567 1061109567
0 1061109567 1061109567
NO

百思不得其解

2024/3/3 14:57
加载中...