救救孩子吧!!84分难受了一下午T.T( 卡#9,#10)
查看原帖
救救孩子吧!!84分难受了一下午T.T( 卡#9,#10)
517817
imurnm楼主2022/10/28 16:48
#include<bits/stdc++.h>
using namespace std;
int n,m;
vector <int> a[2001];
vector <int> b[2001];
int dis[2001];
int len[2001];
int in[2001];		
queue<int> q;
void init()
{
	for(int i=1;i<=n;i++)
	{
		a[i].clear();
		b[i].clear();
		dis[i]=1e5;
		len[i]=0;
		in[i]=0;
	}	
	while (!q.empty())	
	{
		q.pop();
	}
} 
bool output()
{		
			q.push(1);
			dis[1]=0;
			in[1]=1;
			while(!q.empty())
			{
				int x=q.front();
				q.pop();
				in[x]=0;
				for(int i=0;i<a[x].size();i++)
				{
					if(dis[a[x][i]]>dis[x]+b[x][i])
					{
						dis[a[x][i]]=dis[x]+b[x][i];
						len[a[x][i]]=len[x]+1;
						if(in[a[x][i]]==0)
						{
							q.push(a[x][i]);
							in[a[x][i]]=1;
						}
						if(len[a[x][i]]>=n)
						{
					    return true;
						}	
					}
				}	
			}
			return false;
}
int main()
{
		int k;
		cin>>k;
		while(k--)
		{
			init();
			cin>>n>>m;
			int u,v,w;
			for(int i=0;i<m;i++)
			{
				cin>>u>>v>>w;
				if(w>=0)
				{
					a[v].push_back(u);
					b[v].push_back(w);
				}
				a[u].push_back(v);
				b[u].push_back(w);
			}
			if(output()==true)
			{
				cout<<"YES"<<endl;
			}
			else
			{
				cout<<"NO"<<endl;
			}
		}	
}
```谢谢大佬们!!
2022/10/28 16:48
加载中...