有没有大佬能解释一下,为什么会卡第12个测试点
查看原帖
有没有大佬能解释一下,为什么会卡第12个测试点
555824
chocolateman楼主2024/8/10 17:17

将代码后段的dis[v[i]]<0x3f3f3f3f>>1中的>>1去掉后,程序会卡第12个测试点,反之则能AC,有没有大佬能解释下是为什么?

#include<bits/stdc++.h>
using namespace std;
int t,n,m;
int u[10010],v[10010],w[10010],dis[10010];
int tot;
int a,b,c;
void bell(int s){
	memset(dis,0x3f3f3f3f,sizeof(dis));
	dis[1]=0;
	for(int i=1;i<n;i++){
		for(int j=1;j<=tot;j++){
			if(dis[u[j]]+w[j]<dis[v[j]]){
				dis[v[j]]=dis[u[j]]+w[j];
			}
		}
	}
	return ;
}
int main(){
	cin>>t;
	for(int k=1;k<=t;k++){
		cin>>n>>m;
		tot=0;
		memset(u,0,sizeof(u));
		memset(v,0,sizeof(v));
		memset(w,0,sizeof(w));
		for(int i=1;i<=m;i++){
			cin>>a>>b>>c;
			if(c>=0){
				tot++;
				u[tot]=a;
				v[tot]=b;
				w[tot]=c;
				tot++;
				u[tot]=b;
				v[tot]=a;
				w[tot]=c;
			}
			else {
				tot++;
				u[tot]=a;
				v[tot]=b;
				w[tot]=c;
			}
		}
		bell(1);
		bool f=true;
		for(int i=1;i<=tot;i++){
			if((dis[u[i]]+w[i]<dis[v[i]])&&(dis[v[i]]<0x3f3f3f3f>>1)){
				cout<<"YES"<<'\n';
				f=false;
				break;
			}
		}
		if(f) cout<<"NO"<<'\n';
	}
	
	return 0;
}

2024/8/10 17:17
加载中...