80求助WA#5 #8,玄关
查看原帖
80求助WA#5 #8,玄关
919607
JasonTesla楼主2025/6/15 13:30
#include<bits/stdc++.h>
using namespace std;
const int N=101;
int n,m,u,v,w,e[N][N],d[N][N],pos[N][N],path[N],cnt,res=0x3f3f3f3f;
void built(int l,int r){
	if(!pos[l][r])return ;
	built(l,pos[l][r]);
	path[++cnt]=pos[l][r];
	built(pos[l][r],r);
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>m;
	memset(e,0x3f,sizeof e);
	for(int i=1;i<=n;i++)e[i][i]=0;
	for(int i=1;i<=m;i++){
		cin>>u>>v>>w;
		e[u][v]=e[v][u]=min(e[v][u],w);
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)d[i][j]=e[i][j];
	} 
	for(int k=1;k<=n;k++){
		for(int i=1;i<k;i++){
			for(int j=i+1;j<k;j++){
				if(res-d[i][j]>e[j][k]+e[k][i]){
					res=d[i][j]+d[j][k]+e[k][i];
					cnt=0;
					path[++cnt]=i;
					built(i,j);
					path[++cnt]=j;
					path[++cnt]=k;
				}
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(d[i][j]>d[i][k]+d[k][j]){
					d[i][j]=d[i][k]+d[k][j];
					pos[i][j]=k;
				}
			}
		}
	}
	if(res==0x3f3f3f3f)cout<<"No solution.";
	else{
		for(int i=1;i<=cnt;i++){
			if(i!=1)cout<<" ";
			cout<<path[i];
		}
	}
	return 0;
}
2025/6/15 13:30
加载中...