部門聚會

題目鏈接:部門聚會


隨便dp一下就行,看當前是否出席會議。


AC代碼:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=1e5+10;
int n,rt,deg[N];	double a[N],dp[N][2];
vector<int> g[N];
void dfs(int x){
	dp[x][1]=a[x];
	for(auto to:g[x]){
		dfs(to);
		dp[x][1]+=max(dp[to][1]-a[to]/2,dp[to][0]);
		dp[x][0]+=max(dp[to][1],dp[to][0]);
	}
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++)	cin>>a[i];
	for(int i=2,a,b;i<=n;i++)	cin>>a>>b,g[a].push_back(b),deg[b]++;
	for(int i=1;i<=n;i++)	if(!deg[i])	rt=i;
	dfs(rt);
	printf("%.1lf\n",max(dp[rt][0],dp[rt][1]));
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章