求助,0分超时
查看原帖
求助,0分超时
897157
yangdongliang楼主2024/3/26 20:22
#include<bits/stdc++.h>
using namespace std;
int n,m,u,v,w,t;
int pre[2010],d[2010],tim[10001];
bool f[2010];
int k;
struct aa{
	int to,from,l,next;
};
aa a[6010];
void spfa()
{
	queue<int> q;
	int j;
	q.push(1);
	f[1]=true;
	d[1]=0;
	while(!q.empty())
	{
		int x=q.front();
		for(j=pre[x];j!=0;j=a[j].next)
		{
			int y=a[j].to;
			if(a[j].l+d[x]<d[y])
			{
				d[y]=a[j].l+d[x];
				tim[y]=tim[x]+1;
				if(tim[y]>=n)
				{
					cout<<"YES"<<endl;
					return;
				}
				if(!f[y])
				{
					f[y]=true;
					q.push(y);
				}
			}
		}
		q.pop();
		f[x]=false;
	}
	cout<<"NO"<<endl;
}
void add(int u,int v,int len)
{
	k++;
	a[k].from=u;
	a[k].to=v;
	a[k].l=len;
	a[k].next=pre[u];
	pre[u]=k;
}
int main()
{
	cin>>t;
	for(int p=1;p<=t;p++)
	{
		k=0;
		cin>>n>>m;
		for(int i=1;i<=m;i++)
		{
			cin>>u>>v>>w;
			add(u,v,w);
			if(w>=0)
			{
				add(v,u,w);
			} 
		}
		memset(d,0x3f,sizeof(d));
		memset(f,0,sizeof(f));
		memset(tim,0,sizeof(tim));
		spfa();
	}
	return 0;
}



2024/3/26 20:22
加载中...