疑惑中(wa #6#7)
查看原帖
疑惑中(wa #6#7)
930810
liyancen楼主2024/10/8 18:19
#include<bits/stdc++.h>
using namespace std;
const long long INF=1e13;
long long a[310][310],dis[310][310];
long long n,m,ans=INF;
int main(){
	cin>>n>>m;
	memset(dis,0x3f3f3f,sizeof(dis));
	memset(a,0x3f3f3f,sizeof(a));
	for (int i=0;i<=n+5;i++){
		a[i][i]=0;
		dis[i][i]=0;
	}
	for (int i=1;i<=m;i++){
		long long x,y,z;
		cin>>x>>y>>z;
		a[x][y]=a[y][x]=min(a[x][y],z);
		dis[x][y]=dis[y][x]=a[x][y];
	}
	for (int k=1;k<=n;k++){
		//计算最小环 
		for (int i=1;i<k;i++){//因为是计算编号数小于等于k-1的结点,所以是i<k 
			for (int j=i+1;j<k;j++){
				ans=min(dis[i][j]+a[i][k]+a[k][j],ans);
			}
		}
		//计算Floyd 
		for (int i=1;i<=n;i++){
			for (int j=1;j<=n;j++){
				dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
			}
		}
	}
	if (ans==INF)cout<<"No solution.";
	else cout<<ans;
	return 0;
}

求调

2024/10/8 18:19
加载中...