84分WA1,9求调
查看原帖
84分WA1,9求调
648953
1Stone楼主2022/8/22 14:43

初始化都加了,但还是WA了两个点~~

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
int T,n,m,u,v,w,cnt,head[20005];
struct Edge{
	int to,from,v,nex;
}edges[60005];
void init()
{
	cnt=0;
	memset(head,0,sizeof(head));
}
void add(int from,int to,int v)
{
	edges[++cnt].to=to;
	edges[cnt].v=v;
	edges[cnt].nex=head[from];
	head[from]=cnt;
}
void spfa()
{
	queue<int> Q;
	bool vs[20005];
	int ds[20005],t[20005];
	memset(t,0,sizeof(t));
	memset(ds,0x3f,sizeof(ds));
	memset(vs,0,sizeof(vs));
	ds[1]=0;
	vs[1]=1;
	t[1]=1;
	Q.push(1);
	while(Q.size())
	{
		int nw=Q.front();
		Q.pop();
		vs[nw]=0;
		if(t[nw]>=n){
			cout<<"YES"<<endl;
			return;
		}
		for(int i=head[nw];i;i=edges[i].nex)
		{
			int zd=edges[i].to,v=edges[i].v+ds[nw];
			if(ds[zd]>v&&!vs[zd])
			{
				ds[zd]=v;
				Q.push(zd);
				t[zd]++;
				vs[zd]=1;
				if(t[zd]>=n)
				{
					cout<<"YES"<<endl;
					return;
				}
			}
		}
	}
	cout<<"NO"<<endl;
}
int main()
{
	cin>>T;
	for(int i=1;i<=T;i++)
	{
		init();
		scanf("%d%d",&n,&m);
		for(int i=1;i<=m;i++)
		{
			scanf("%d%d%d",&u,&v,&w);
			add(u,v,w);
			if(w>=0)add(v,u,w);
		}
		spfa();
	}
	
	
	
	
	
	return 0;
}
2022/8/22 14:43
加载中...