这里我对每个节点进行一次BFS,然后求最小值。
代码:
#include <bits/stdc++.h>
using namespace std;
struct node{
int pep;
int s=0;
}a[105];
queue <int> A;
int g[105][105];
bool mp[105];
int n,q,w,e;
void bfs(int id){
A.push(id);
mp[id]=1;
int temp,step=1;
while(!A.empty()){
temp=A.front();
A.pop();
for(int i=1;i<=n;i++){
if(g[temp][i]&&mp[i]==0){
mp[i]=1;
a[id].s+=step*a[i].pep;
A.push(i);
}
}
step++;
}
return ;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d%d",&a[i].pep,&q,&w);
if(q) g[q][i]=g[i][q]=1;
if(w) g[w][i]=g[i][w]=1;
}
for(int i=1;i<=n;i++){
memset(mp,0,sizeof(mp));
bfs(i);
}
int mn=2147483647;
for(int i=1;i<=n;i++) mn=min(mn,a[i].s);
printf("%d",mn);
return 0;
}