90pts WA on #9求助大佬
查看原帖
90pts WA on #9求助大佬
430920
Tis员工楼主2024/10/18 12:27

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;
}
2024/10/18 12:27
加载中...