题目
求最小路径和
分析
然后我还是喜欢格式上简洁的floyd
代码
#include <cstdio>
using namespace std;
int g[102][102],a[102],t,x,y,n,s,min=2147483647;
int main(){
scanf("%d",&n);
for (int i=0;i<=n+1;i++)
for (int j=0;j<=n+1;j++) g[i][j]=2147483647;
for (int i=1;i<=n;i++){
scanf("%d%d%d",&a[i],&x,&y);
g[i][x]=1; g[x][i]=1;
g[i][y]=1; g[y][i]=1; g[i][i]=2147483647;
}
for (int k=1;k<=n;k++)
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) if (i!=j)
if (g[i][j]>(long long)g[i][k]+g[k][j]) g[i][j]=g[i][k]+g[k][j];//floyd(强制转换避免bug)
for (int i=1;i<=n;i++,s=0){
for (int j=1;j<=n;j++) if (i!=j) s+=g[i][j]*a[j];//人口数
if (min>s) min=s;
}
printf("%d",min); return 0;
}