学树的时候瞥见的这题。
很水很水。以至于看了30s题解就会了。
可以用BFS来做,也可以用Floyd+爆搜。
我当然选择写(chao)第二种了。
数据开大,要初始化。这样就AC了
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int a[101],g[101][101],n,i,j,k;
int ren,l,r;
int main()
{
scanf("%d",&n);
memset(g,1,sizeof g);
for (i=1;i<=n;i++)
{
scanf("%d%d%d",&a[i],&l,&r);
if (l>0) g[i][l]=g[l][i]=1;
if (r>0) g[i][r]=g[r][i]=1;
g[i][i]=0;
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
if(i!=k)
for(j=1;j<=n;j++)
if(i!=j&&j!=k)
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
int mixn=99999999,tot;
for(i=1;i<=n;i++)
{
tot=0;
for(j=1;j<=n;j++)
tot+=g[i][j]*a[j];
mixn=min(mixn,tot);
}
printf("%d\n",mixn);
return 0;
}