E17【模板】树形DP P1352 没有上司的舞会
视频链接:E17【模板】树形DP P1352 没有上司的舞会_哔哩哔哩_bilibili
P1352 没有上司的舞会 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=6010; int head[N],to[N],ne[N],idx; void add(int a,int b){ to[++idx]=b,ne[idx]=head[a],head[a]=idx; } int n,w[N],fa[N]; int f[N][2]; //0不选,1选 void dfs(int u){ f[u][1]=w[u]; for(int i=head[u];i;i=ne[i]){ int v=to[i]; dfs(v); f[u][0]+=max(f[v][0],f[v][1]); f[u][1]+=f[v][0]; } } int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>w[i]; for(int i=0,a,b;i<n-1;i++){ cin>>a>>b; add(b,a); fa[a]=true; } int root=1; while(fa[root]) root++; dfs(root); cout<<max(f[root][0],f[root][1]); }