题解 P1828 【香甜的黄油 Sweet Butter】
香甜的黄油
弗洛伊德算法
#include<iostream>
#include<algorithm>
using namespace std;
int jl[5000][5000];//距离
int main()
{
int n,ns,p,c,a[8000]={0},qd,zd,qz;
cin>>n>>p>>c;//输入牛的数量,牧场和边数
for(int i=1;i<=n;i++)
{
cin>>ns;
a[ns]++;
}
for(int i=1;i<=p;i++)
for(int j=1;j<=p;j++)
if(i!=j) jl[i][j]=1e9;
for(int i=1;i<=c;i++)
{
cin>>qd>>zd>>qz;
jl[qd][zd]=qz;
jl[zd][qd]=qz;//双向边
}
for(int k=1;k<=p;k++)
for(int i=1;i<=p;i++)
for(int j=1;j<=i;j++)
if(jl[i][k]+jl[k][j]<jl[i][j])
{
jl[i][j]=jl[i][k]+jl[k][j];
jl[j][i]=jl[i][k]+jl[k][j];//弗洛伊德算法
}
int minnn=1e9,sum=0;
for(int i=1;i<=p;i++)
{
for(int j=1;j<=p;j++)
{
sum+=jl[i][j]*a[j];
}
if(sum<minnn) minnn=sum;//比较
sum=0;
}
cout<<minnn;//输出
return 0;
}