AcWing 1255. 医院设置
原题链接
简单
作者:
刘帅哥
,
2023-08-23 19:27:03
,
所有人可见
,
阅读 77
#include <bits/stdc++.h>
using namespace std;
int n;
const int N = 110, M = N * 2;
int h[N], e[M], ne[M], idx;
int w[N];
bool st[N];
void add(int a, int b){
e[idx] = b;
ne[idx] = h[a];
h[a] = idx;
idx++;
}
int dfs(int u , int lev){
st[u] = 1;
int sum = w[u] * lev;
for(int i = h[u]; i != -1;i = ne[i]){
if(!st[e[i]]) sum += dfs(e[i], lev + 1);
}
return sum;
}
int main(){
memset(h, -1, sizeof h);
cin >> n;
for(int i = 1;i <= n; i++){
int p, l, r;
cin >> p >> l >> r;
w[i] = p;
if(l){
add(i, l);
add(l, i);
}
if(r){
add(i, r);
add(r, i);
}
}
int res = 2e9;
for(int i = 1;i <= n; ++ i){
memset(st, 0, sizeof h);
res = min(res, dfs(i, 0));
}
cout << res;
return 0;
}