84分,求助,为什么测试点1,2数据下载下来记事本打开后为空(输入输出都为空)
查看原帖
84分,求助,为什么测试点1,2数据下载下来记事本打开后为空(输入输出都为空)
630501
Mick_Kong楼主2022/1/14 16:45
#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
const int INF=0x3f3f3f3f;
int dis[2005][2005],mindis[2005];
vector<int>ans[2005];
int T,m,n;
inline int add(int a,int b){
	if(a==0x3f3f3f3f||b==0x3f3f3f3f)return 0x3f3f3f3f;
	else return a+b;
	
}
bool bellman(int s){
	fill(mindis,mindis+2001,INF);
	mindis[s]=0;
	for(int i=0;i<n-1;i++){
		for(int j=1;j<=n;j++){
			for(int each:ans[j]){
				if(add(mindis[j],dis[j][each])<mindis[each]){
					mindis[each]=add(mindis[j],dis[j][each]);
				}
			}
		}		
	}
	for(int j=1;j<=n;j++){
			for(int each:ans[j]){
				if(add(mindis[j],dis[j][each])<mindis[each]){
					mindis[each]=add(mindis[j],dis[j][each]);
					return true;
				}
			}
		}
	return false;
}
int main(){
	int u,v,w;
	cin>>T;
	while(T--){
		for(int i=1;i<=2000;i++){
			for(int j=1;j<=2000;j++){
				dis[i][j]=dis[j][i]=INF;				
			}
		}
		cin>>n>>m;
		for(int i=0;i<m;i++){
			cin>>u>>v>>w;			
			if(w>=0){
				dis[u][v]=dis[v][u]=w;
				ans[u].push_back(v);
			    ans[v].push_back(u);
			}
			else{
				dis[u][v]=w;
				ans[u].push_back(v);
			}
		}
		if(bellman(1)){
			cout<<"YES"<<endl;			
		}
		else{
		    cout<<"NO"<<endl;	
		}
	}
	
} 
2022/1/14 16:45
加载中...