SPFA板子题52分求助,莫名WA
查看原帖
SPFA板子题52分求助,莫名WA
342494
wxh666楼主2023/3/28 17:54

提交记录

#include<bits/stdc++.h>
using namespace std;
struct lsqxx{
	int v,w,nxt;
}e[100005];
int cnt=0,h[10000];
void add(int u,int v,int w)
{
	e[++cnt].v=v,e[cnt].w=w,e[cnt].nxt=h[u];h[u]=cnt;
}
int t,n,m;
int x,y,z,flag;
int dis[10005],vis[10005];
struct ssr{
	int x,cnt;
};
queue<ssr>q;
void SPFA()
{
	while(!q.empty())
	{
		if(q.front().cnt>n) {flag=1;return;}
		int u=q.front().x;
		int cnts=q.front().cnt;
		q.pop();
		vis[u]=0;
		for(int i=h[u];i;i=e[i].nxt)
		{
			int v=e[i].v;
			if(dis[u]+e[i].w>=dis[v]) continue;
			dis[v]=dis[u]+e[i].w;
			if(vis[v]) continue;
			vis[v]=1;
			q.push(ssr{v,cnts+1});
		}
	}
}
int main()
{
	cin>>t;
	while(t--)
	{
		scanf("%d%d",&n,&m);
		for(int i=1;i<=m;i++)
		{
			scanf("%d%d%d",&x,&y,&z);
			if(z>=0)
				add(x,y,z),add(y,x,z);
			else
				add(x,y,z);
		}
		memset(dis,0x3f,sizeof(dis));
		dis[1]=0;
		q.push(ssr{1,0});
		SPFA();
		if(flag) printf("YES\n");
		else printf("NO\n");
		flag=0;
		cnt=0;
		memset(h,0,sizeof(h));
	}
	return 0;
}
2023/3/28 17:54
加载中...