萌新刚学OI,求助只有十分的SPFA
查看原帖
萌新刚学OI,求助只有十分的SPFA
298549
SIXIANG32楼主2020/7/5 14:15
#include<iostream>
#include<queue>
#include<vector> 
using namespace std;
struct node{
	int to,val;
	node(int y_,int val_)
	{to=y_,val=val_;}
};
vector<node>gra[10010];
long long dis[10010];
bool vis[10010];
int cnt[10010];
int n,m,s=1;
bool SPFA()
{
	for(int p=1;p<=n;p++)
		dis[p]=2147483647;
	queue<int>que;
	que.push(s);
	dis[s]=0;
	vis[s]=1;
	while(!que.empty())
	{
		int fr=que.front();
		que.pop();
		vis[fr]=0;
		for(int p=0;p<gra[fr].size();p++)
		{
			int t=gra[fr][p].to;
			if(dis[t]>dis[fr]+gra[fr][p].val)
			{
				dis[t]=dis[fr]+gra[fr][p].val;
				if(!vis[t])
				{
					vis[t]=1;
					que.push(t);
					cnt[t]++;
					if(cnt[t]>=n)return 1;
				}
			}
		}
	}
	return 0;
}
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		cin>>n>>m;
		for(int p=1;p<=n;p++)
			cnt[p]=0;
		for(int p=1;p<=n;p++)
			for(int i=0;i<gra[p].size();i++)
				gra[p][i].to=0,gra[p][i].val=0;
		for(int p=1,x,y,z;p<=m;p++)
		{
			cin>>x>>y>>z;
			gra[x].push_back(node(y,z));
			if(z>=0)
			gra[y].push_back(node(x,z));
		}
		if(SPFA())cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
}

请问哪里错了/kk

2020/7/5 14:15
加载中...