題目鏈接:部門聚會
隨便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;
}