rt,刚刚蓝桥杯中级组最后一题。我用的没有上司的舞会写法,结果寄了。这个题数据有点毒。。。 代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
vector<int> g[N];
int f[N][2], a[N];
int dfs(int x, int sta, int fa){
if (f[x][sta] != -1)
return f[x][sta];
int sum;
if (sta == 1){
sum = a[x];
for (int i = 0; i < g[x].size(); i ++ ){
int y = g[x][i];
if(y == fa)
continue;
sum += dfs(y, 0, x);
}
}
if (sta == 0){
sum = 0;
for (int i = 0; i < g[x].size(); i ++ ){
int y = g[x][i];
if (y == fa)
continue;
sum += max(dfs(y, 0, x), dfs(y, 1, x));
}
}
return f[x][sta] = sum;
}
int main(){
int n;
cin >> n;
int x, y;
int root;
for (int i = 1; i <= n; i ++ ){
scanf ("%d%d", &x, &y);
scanf ("%d", &a[i]);
g[x].push_back(y);
if (x == 0) root = y;
}
memset(f, -1, sizeof(f));
cout << max(dfs(root, 0, -1), dfs(root, 1, -1));
return 0;
}