【树形dp+并查集】Anniversary party POJ
来源:互联网 发布:家装网络布线图 编辑:程序博客网 时间:2024/05/20 11:36
Think:
1题意:举行聚会,参会人选不希望自己的直属上司参加,关系形成一棵树,参会人选每个人有自己的开心度,求最大开心度
2思路:树形dp + 并查集(寻找根节点)
建议参考博客
以下为Accepted代码
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 6004;int n, dp[N][2], far[N], vis[N];void DFS(int u);int main(){ int i, s, f, root; while(~scanf("%d", &n)){ memset(dp, 0, sizeof(dp)); memset(vis, 0, sizeof(vis)); for(i = 1; i <= n; i++)/*并查集初始化*/ far[i] = i; for(i = 1; i <= n; i++) scanf("%d", &dp[i][1]); while(scanf("%d %d", &s, &f) && (s || f)){ far[s] = f; } root = 1; while(far[root] != root)/*寻找根节点*/ root = far[root]; DFS(root); printf("%d\n", max(dp[root][1], dp[root][0])); } return 0;}void DFS(int u){ vis[u] = 1; for(int i = 1; i <= n; i++){ if((!vis[i]) && far[i] == u){ DFS(i); dp[u][1] += dp[i][0];/*上属去下属不去*/ dp[u][0] += max(dp[i][1], dp[i][0]);/*上属不去前提下下属去或不去取最大值*/ } }}
阅读全文
0 0
- 【树形dp+并查集】Anniversary party POJ
- poj Anniversary party (树形DP)
- poj 2342 Anniversary party 树形DP
- poj 2342 Anniversary Party(树形dp)
- POJ 2342 Anniversary party(树形DP)
- poj 2342 Anniversary party 简单树形dp
- poj 2342 Anniversary party,树形DP easy
- POJ 2342 Anniversary Party ( 树形DP )
- poj 2342Anniversary party(树形dp)
- poj 2342 Anniversary party 简单树形dp
- POJ - 2342 Anniversary party 树形DP
- poj 2342 Anniversary party(树形dp)
- POJ-2342::Anniversary party-树形DP
- POJ 2342Anniversary party(树形DP)
- POJ 2342 Anniversary party (树形dp)
- poj 2342 Anniversary party(树形dp)
- POJ 2342 Anniversary party【树形DP】
- POJ 2342 - Anniversary party (树形dp)
- 最大子序列和问题的求解(时间复杂度为O(N))
- CentOS7搭建FastDFS V5.11分布式文件系统及Java整合详细过程(一)
- 提交form后,清空form内input值
- Java 多线程并发编程之 Synchronized 关键字
- selenium2+python3自动化1-加载FireFox配置
- 【树形dp+并查集】Anniversary party POJ
- UE4学习1
- .net core 控制台输出乱码问题
- MyBatis概述
- [Spring] 初识spring
- Python3.X中的循环
- group_concat()函数总结
- 全向轮移动平台运动模型
- 机器学习-->sklearn数据预处理