求助!floyed炸了!
#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
int tree[105];//树
int n,ans=1000000;
int g[105][105];//两点距离计算
int main()
{
cin >> n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
g[i][j]=100000;
int a,b;//左右孩子
for(int i = 1;i <= n; ++i)
{
g[i][i]=0;
cin >> tree[i];//输入居民数
cin >> a >> b;
if(a>0)g[i][a]=g[a][i]=1;
if(b>0)g[i][b]=g[b][i]=1;
}
//好了,现在每个节点的信息都好了
//开始遍历距离(时间复杂度要炸的样纸)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j)
{
for(int k=1;i<=n;i++)
{
if(g[j][i]+g[i][k]<g[j][k])
g[j][k]=g[j][i]+g[i][k];
}
}
for(int i=1;i<=n;i++)
{
int k=0;
for(int j=1;j<=n;j++)
{
k += g[i][j]*tree[j];
}
ans = min(ans, k);
}
cout<<ans;
return 0;
}