问题描述
思路
本题用floyed算法求出一点到其余个点的最短路径,然后按照题目要求求最小值
代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n,x,y,num=0,res=1e9;
cin>>n;
vector <int> p(n+1);
vector <vector <int> > a(n+1,vector <int> (n+1,1e9));
for(int i=1;i<=n;i++) {
cin>>p[i]>>x>>y;
if(x!=0) a[i][x]=a[x][i]=1;
if(y!=0) a[i][y]=a[y][i]=1;
}
for(int k=1;k<=n;k++) {
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
if(a[i][k]+a[k][j]<a[i][j]) {
a[i][j]=a[i][k]+a[k][j];
}
}
}
}
for(int i=1;i<=n;i++) {
num=0;
for(int j=1;j<=n;j++) {
if(i!=j) num+=p[j]*a[i][j];
}
res=min(res,num);
}
cout<<res;
return 0;
}