树上Dp 求调
  • 板块题目总版
  • 楼主Zaku
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/5/14 11:56
  • 上次更新2023/10/23 15:47:28
查看原帖
树上Dp 求调
691532
Zaku楼主2023/5/14 11:56

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;
}
2023/5/14 11:56
加载中...