这代码没问题???
查看原帖
这代码没问题???
531776
LYM20114楼主2022/10/25 22:30

总感觉树状dp不能用记搜写啊...

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
int n,maxn = -21474836472147483647;
int v[16005];
vector <int> G[16005];
map <int,int> f;
int dp(int x,int fa){
	if(f.count(x)) return f[x];
	int sum = v[x];
	for(int i = 0;i < G[x].size();i++){
		int xx = G[x][i];
		if(xx != fa)
			sum = max(sum,sum + dp(xx,x));
	}
	return f[x] = sum;
}
int main(){
	cin >> n;
	for(int i = 1;i <= n;i++)
		cin >> v[i];
	for(int i = 1;i < n;i++){
		int x,y;
		cin >> x >> y;
		G[x].push_back(y);
		G[y].push_back(x);
	}
	dp(1,-1);
	for(int i = 1;i <= n;i++)
		maxn = max(maxn,f[i]);
	cout << maxn;
	return 0;
}
2022/10/25 22:30
加载中...