救命!!代码求调!!
查看原帖
救命!!代码求调!!
601270
Secret_Sky_2021楼主2023/9/24 11:46
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int t,n,m;
int x,y,z;
int h[N],idx=0;
bool vis[N];
int cnt[N];
struct pw{
	int x,nxt,w;
} num[N];
void add(int y,int x,int w){
	idx++;
	num[idx].x=x;
	num[idx].w=w;
	num[idx].nxt=h[y];
	h[y]=idx;
}
int q[N],hh=0,tt=0;
int dist[N];
bool SPFA(){
	vis[1]=1;
	q[tt++]=1;
	dist[1]=0;
	while(tt!=hh){
		int x=q[hh++];
		if(hh==N) hh=0;
		for(int i=h[x];~i;i=num[i].nxt){
			int uo=num[i].x;
			if(dist[uo]>num[i].w+dist[x]){
				dist[uo]=num[i].w+dist[x];
				cnt[uo]=cnt[x]+1;
				if(cnt[uo]>=n) return 1;
				if(!vis[uo]){
					vis[uo]=1;
					q[tt++]=uo;
					if(tt==N) tt=0;
				}
			}
		}
	}
	return 0;
}
int main()
{
	cin>>t;
	while(t--){
		memset(vis,0,sizeof(vis));
		memset(h,-1,sizeof(h));
		memset(dist,0x3f,sizeof(dist));
		memset(cnt,0,sizeof(cnt));
		idx=hh=tt=0;
		cin>>n>>m;
		for(int i=1;i<=m;i++){
			cin>>x>>y>>z;
			if(z>0)add(x,y,z);
			add(y,x,z);
		}
		for(int i=1;i<=n;i++){
			add(0,i,0);
		}
		
		if(SPFA()) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
//		for(int i=1;i<=n;i++){
//			cout<<cnt[i]<<' ';
//		}
//		cout<<endl<<endl;
	}
	
	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
------
0 1
*/
2023/9/24 11:46
加载中...