[poj2342]Anniversary party树形dp入门
2017-08-22 21:03
309 查看
题意:选出不含直接上下司关系的最大价值。
解题关键:树形dp入门题,注意怎么找出根节点,运用了并查集的思想。
转移方程:dp[i][1]+=dp[j][0];/i是j的子树
dp[i][0]+=max(dp[j][0],dp[j][1]);
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<cmath> #include<vector> using namespace std; typedef long long ll; const int maxn=7000; vector<int>G[maxn]; int father[maxn]; int dp[6005][2]; void dfs(int u,int fa){ int s=(int)G[u].size(); for(int i=0;i<s;i++){ int v=G[u][i]; if(v==fa) continue; dfs(v,u); dp[u][1]+=dp[v][0]; dp[u][0]+=max(dp[v][0],dp[v][1]); } } int main(){ int n; while(cin>>n){ memset(father, -1, sizeof father); int a,b; for(int i=1;i<=n;i++){ cin>>dp[i][1]; } int root=1; for(int i=0;i<n-1;i++){ cin>>a>>b; G[b].push_back(a); father[a]=b; root=b; } cin>>a>>b; while(father[root]!=-1) root=father[root]; dfs(root,0); int ans=max(dp[root][0],dp[root][1]); cout<<ans<<"\n"; } return 0; }
相关文章推荐
- POJ2342 ->Anniversary party(树形DP入门题)
- poj2342 Anniversary party(树形dp)
- poj2342 Anniversary party (树形DP)
- poj 2342 Anniversary party (树形dp入门)
- Anniversary party_poj2342_树形dp
- HDU 1520 Anniversary party(树形DP入门)
- 【POJ 2342】Anniversary party(入门树形dp)
- POJ2342:Anniversary party(树形DP)
- poj2342 Anniversary party【树形dp】
- POJ 2342 Anniversary Party题解 - 树形DP入门题目
- poj 2342 Anniversary party 树形dp入门
- poj2432 Anniversary party 入门级树形dp
- HDU 1520 Anniversary party 树形DP入门
- [ACM] POJ 2342 Anniversary party (树形DP入门题)
- POJ2342 Anniversary party(树形DP)
- [HDU] 1520 Anniversary party 入门树形DP
- Anniversary party(树形dp入门)
- hdoj 1520 Anniversary party 【树形DP入门】
- hdu 1520 Anniversary party(入门树形DP)
- poj2342 Anniversary party (树形Dp)