AcWing 1255. 医院设置
原题链接
简单
作者:
沈子楚
,
2023-08-19 14:58:17
,
所有人可见
,
阅读 97
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
vector<int> e[N];
int n, w[N], sz[N], f[N], res = 2e9;
void dfs1(int u, int dep){
sz[u] = w[u], f[1] += w[u] * dep;
for(int v: e[u]){
dfs1(v, dep + 1);
sz[u] += sz[v];
}
}
void dfs2(int u){
res = min(res, f[u]);
for(int v: e[u]){
f[v] = f[u] + sz[1] - 2 * sz[v];
dfs2(v);
}
}
int main(){
cin >> n;
for(int i = 1; i <= n; i++){
int u, v;
cin >> w[i] >> u >> v;
if(u) e[i].push_back(u);
if(v) e[i].push_back(v);
}
dfs1(1, 0), dfs2(1);
cout << res;
return 0;
}