求助,0分10RE
查看原帖
求助,0分10RE
363285
洛桃楼主2020/8/30 10:46

下载了第一个数据,在本地和在线IDE上都运行正常,但还是过不去,为什么???

代码如下(SPFA 链式前向星存图)

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
int t,n,m,dis[2011],f[2011],sum[2011],tot,x,y,w;
bool ex[2011];
struct node{
	int to,next,w;
}a[3010*2];
int add(int x,int y,int w)
{
	a[++tot].to=y;a[tot].w=w;
	a[tot].next=f[x];f[x]=tot;
}
void SPFA()
{
	queue<int> q;
	tot=-1;
	memset(f,-1,sizeof(f));
	scanf("%d %d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d %d %d",&x,&y,&w);
		if(w>=0)
		{add(x,y,w);add(y,x,w);
		}
		else add(x,y,w);
	}
	memset(dis,0x3f,sizeof(dis));
	memset(ex,0,sizeof(ex));
	memset(sum,0,sizeof(sum));
	q.push(1);
	dis[1]=0;ex[1]=1;
	while(!q.empty())
	{
		int u=q.front();
		q.pop();ex[u]=0;
		for(int i=f[u];i!=-1;i=a[i].next)
		{
			int v=a[i].to;
			if(dis[v]>dis[u]+a[i].w)
			{
				dis[v]=dis[u]+a[i].w;
				sum[v]=sum[u]+1;
				if(sum[v]>=n)
				{
					printf("YES\n");return;
				}
				if(!ex[v])
				{
					q.push(v);
					ex[v]=1;
				}
			}
		}
	}
	printf("NO\n");
}
int main()
{
	scanf("%d",&t);
	for(int i=1;i<=t;i++)
	{
		SPFA();
	}
	return 0;
}
2020/8/30 10:46
加载中...