rt,然后发现个事就是我里面那个大N开的越大,第九个测试点就能对的越多,然后不知道为什么
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-48;ch=getchar();}
return x*f;
}
inline void write(int x){
if(x<0){putchar('-');x=-x;}
if(x>9)write(x/10);
putchar(x%10+'0');
}
const int N=5e5+5;
int n,m,t,x,y,z,tot;
int dis[N],h[N],to[N],nex[N],w[N],in[N];
int q[N],head,tail;
bool vis[N];
bool spfa(){
q[1]=1;vis[1]=1;dis[1]=0;
while(head<tail){
++head;
int u=q[head];
vis[u]=0;
for(int i=h[u];i;i=nex[i]){
int v=to[i];
int ww=w[i];
if(dis[v]>dis[u]+ww){
dis[v]=dis[u]+ww;
if(!vis[v]){
++tail;
q[tail]=v;
vis[v]=1;
++in[v];
if(in[v]>=n+1){
return false;
}
}
}
}
}
return true;
}
signed main(){
t=read();
for(int o=1;o<=t;o++){
memset(dis,0x3f,sizeof(dis));
memset(to,0,sizeof(to));
memset(w,0,sizeof(w));
memset(nex,0,sizeof(nex));
memset(vis,0,sizeof(vis));
memset(q,0,sizeof(q));
memset(h,0,sizeof(h));
memset(in,0,sizeof(in));
tot=0;head=0;tail=1;
n=read();m=read();
for(int i=1;i<=m;i++){
x=read();y=read();z=read();
++tot;
w[tot]=z;
to[tot]=y;
nex[tot]=h[x];
h[x]=tot;
if(z>=0){
++tot;
w[tot]=z;
to[tot]=x;
nex[tot]=h[y];
h[y]=tot;
}
}
if(!spfa())printf("YES\n");
else printf("NO\n");
}
return 0;
}