求助:DFS,只有两个点AC
查看原帖
求助:DFS,只有两个点AC
738230
chenmo2008楼主2023/4/28 22:02

思路是DFS,d0与d1分别代表这个人去与不去时的最高快乐指数。

只能AC两个点,感谢各位大佬!

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 10005;
struct Node{
	int d0,d1,r;
	vector<int> son;
	Node(){
		d0 = d1 = r = 0;
	}
};
Node st[MAXN];
bool flag[MAXN];
void dfs(int pos){
	st[pos].d0 = 0;
	st[pos].d1 = st[pos].r; 
	for(int i = 0;i < st[pos].son.size();i++){
		dfs(st[pos].son[i]);
		st[pos].d0 += max(st[st[pos].son[i]].d0,st[st[pos].son[i]].d1);
		st[pos].d1 += st[st[pos].son[i]].d0;
	}
}
int main(){
	int n,l,k,ans = -99999,root = 1;
	cin >> n;
	for(int i = 0;i < n;i++){
		cin >> st[i].r;
	}
	for(int i = 0;i < n-1;i++){
		cin >> l >> k;
		flag[l] = true;
		st[k].son.push_back(l);
	}
	for(int i = 0;i < n;i++){
		if(!flag[i]){
			root = i;
			break;
		}
	}
	dfs(root);
	for(int i = 0;i < n;i++){
		ans = max(ans,max(st[i].d0,st[i].d1));
	}
	cout << ans;
	return 0;
}

2023/4/28 22:02
加载中...