下载了第一个数据,在本地和在线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;
}