题意:哈利波特要考试,考试内容是将a物品用长度为c的魔法变成物品b,问哈利波特选取哪个物品能花费最小的魔法代价实现与其他所有物品的变换
tip:Floyd
#include<iostream>
#include<vector>
using namespace std;
vector<vector<int>>dis(103,vector<int>(103,1e9));
int n,m;
void floyd() {
for(int k=1; k<=n; ++k)
for(int i=1; i<=n; ++i)
for(int j=1; j<=n; ++j)
if(dis[i][j]>dis[i][k]+dis[k][j])
dis[i][j]=dis[i][k]+dis[k][j];
}
int main() {
cin>>n>>m;
for(int i=0; i<m; ++i) {
int a,b,c;
cin>>a>>b>>c;
dis[a][b]=dis[b][a]=c;
}
floyd();
int minindex=0,minlen=1e9;
for(int i=1; i<=n; ++i) {
int maxl=0;
for(int j=1; j<=n; ++j)
if(i!=j&&dis[i][j]>maxl)//找出一行中最大值
maxl =dis[i][j];
if(maxl<minlen) {//在所有行最大值中取最小值
minlen=maxl;
minindex=i;
}
}
if(minlen==1e9)
cout<<0<<endl;
else cout<<minindex<<" "<<minlen<<endl;
return 0;
}