初始化都加了,但还是WA了两个点~~
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
int T,n,m,u,v,w,cnt,head[20005];
struct Edge{
int to,from,v,nex;
}edges[60005];
void init()
{
cnt=0;
memset(head,0,sizeof(head));
}
void add(int from,int to,int v)
{
edges[++cnt].to=to;
edges[cnt].v=v;
edges[cnt].nex=head[from];
head[from]=cnt;
}
void spfa()
{
queue<int> Q;
bool vs[20005];
int ds[20005],t[20005];
memset(t,0,sizeof(t));
memset(ds,0x3f,sizeof(ds));
memset(vs,0,sizeof(vs));
ds[1]=0;
vs[1]=1;
t[1]=1;
Q.push(1);
while(Q.size())
{
int nw=Q.front();
Q.pop();
vs[nw]=0;
if(t[nw]>=n){
cout<<"YES"<<endl;
return;
}
for(int i=head[nw];i;i=edges[i].nex)
{
int zd=edges[i].to,v=edges[i].v+ds[nw];
if(ds[zd]>v&&!vs[zd])
{
ds[zd]=v;
Q.push(zd);
t[zd]++;
vs[zd]=1;
if(t[zd]>=n)
{
cout<<"YES"<<endl;
return;
}
}
}
}
cout<<"NO"<<endl;
}
int main()
{
cin>>T;
for(int i=1;i<=T;i++)
{
init();
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
if(w>=0)add(v,u,w);
}
spfa();
}
return 0;
}