HDU 1520Anniversary party(树型DP)
HDU 1520 Anniversary party
题目是说有N个人参加party,每个人有一个rating值(可以理解为权值)和一个up(上司的编号),为了保证party的趣味性,每一个人不可以和他的直接上司都参加,问最后的rating和最大
这是一个典型的树形DP,DP[i][0]表示i不参加那他的这棵子树上的最大权值,DP[i][1]表示i参加时的这棵树上的最大权值,那么:
DP[i][0] = sum{MAX(DP[j][1], DP[j][0]) | j是i的直接子节点}
DP[i][1] = sum{DP[j][0] | j是i的直接子节点}
1 //#pragma comment(linker,"/STACK:102400000,102400000") 2 #include <map> 3 #include <set> 4 #include <stack> 5 #include <queue> 6 #include <cmath> 7 #include <ctime> 8 #include <vector> 9 #include <cstdio> 10 #include <cctype> 11 #include <cstring> 12 #include <cstdlib> 13 #include <iostream> 14 #include <algorithm> 15 using namespace std; 16 #define INF 1e9 17 #define inf (-((LL)1<<40)) 18 #define lson k<<1, L, mid 19 #define rson k<<1|1, mid+1, R 20 #define mem0(a) memset(a,0,sizeof(a)) 21 #define mem1(a) memset(a,-1,sizeof(a)) 22 #define mem(a, b) memset(a, b, sizeof(a)) 23 #define FOPENIN(IN) freopen(IN, "r", stdin) 24 #define FOPENOUT(OUT) freopen(OUT, "w", stdout) 25 template<class T> T CMP_MIN(T a, T b) { return a < b; } 26 template<class T> T CMP_MAX(T a, T b) { return a > b; } 27 template<class T> T MAX(T a, T b) { return a > b ? a : b; } 28 template<class T> T MIN(T a, T b) { return a < b ? a : b; } 29 template<class T> T GCD(T a, T b) { return b ? GCD(b, a%b) : a; } 30 template<class T> T LCM(T a, T b) { return a / GCD(a,b) * b; } 31 32 //typedef __int64 LL; 33 //typedef long long LL; 34 const int MAXN = 6010; 35 const int MAXM = 100005; 36 const double eps = 1e-13; 37 //const LL MOD = 1000000007; 38 39 int N, a[MAXN], dp[MAXN][2]; 40 int fa[MAXN]; 41 vector<int>e[MAXN]; 42 43 void DFS(int u) 44 { 45 int s0 = 0, s1 = 0; 46 for(int i=0;i<e[u].size();i++) 47 { 48 DFS(e[u][i]); 49 s0 += MAX( dp[e[u][i]][0], dp[e[u][i]][1] ); 50 s1 += dp[e[u][i]][0]; 51 } 52 dp[u][0] = s0; 53 dp[u][1] = s1 + a[u]; 54 } 55 56 int main() 57 { 58 //FOPENIN("in.txt"); 59 while(~scanf("%d", &N)) 60 { 61 mem0(dp); 62 for(int i=1;i<=N;i++) 63 { 64 scanf("%d", &a[i]); 65 fa[i] = i; 66 e[i].clear(); 67 } 68 int x, y; 69 while(scanf("%d %d", &x, &y) && (x||y) ){ 70 e[y].push_back(x); 71 fa[x] = y; 72 } 73 int ans = 0; 74 for(int i=1;i<=N;i++) if(fa[i] == i) 75 { 76 DFS(i); 77 ans += MAX(dp[i][0], dp[i][1]); 78 } 79 printf("%d\n", ans); 80 } 81 return 0; 82 }
转载于:https://www.cnblogs.com/gj-Acit/p/3888293.html
HDU 1520Anniversary party(树型DP)相关推荐
- 其他OJ 树型DP 选课
在朱全民的PPT介绍的一个树型DP经典题,<选课>,中文题目,不结束 找了很久找到了可以提交的OJ,重庆八中 http://www.cqoi.net:2012/JudgeOnline/pr ...
- 【树型DP】BZOJ1564 二叉查找树(noi2009)
标签: 二叉查找树 [题目描述] 已知一棵特殊的二叉查找树.根据定义,该二叉查找树中每个结点的数据值都比它左儿子结点的数据值大,而比它右儿子结点的数据值小. 另一方面,这棵查找树中每个结点都有一个权值 ...
- 【树型DP】加分二叉树
问题 b: [树型DP]加分二叉树 时间限制: 1 Sec 内存限制: 64 MB 提交: 8 解决: 6 [提交] [状态] [讨论版] [命题人:admin] 题目描述 科技忽略了过程就是魔法 ...
- 二叉苹果树(树型DP+背包)
二叉苹果树 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点).这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号 ...
- POJ3342 Party at Hali-Bula(树型DP求最大独立集+唯一解判断)
题意: 公司参加聚会,要求员工不能和他的上司同时参加,求最多能参加几个人并且判断解是否唯一. 要点: 树型DP的经典题,用dp[u][1]表示选取u的最大值,dp[u][0]表示不选取u的最大值,容易 ...
- 虚树+树型DP SDOI2011消耗战
<虚树+树型DP> SDOI2011消耗战 #include <iostream> #include <cstdio> #include <cstring&g ...
- BSOJ 2923:藤原妹红 MST+树型DP
2923 -- [模拟试题]藤原妹红 Description 在幻想乡,藤原妹红是拥有不老不死能力的人类.虽然不喜欢与人们交流,妹红仍然保护着误入迷途竹林村民.由于妹红算得上是幻想乡最强的人类,对于她 ...
- 洛谷P3354 Riv河流 [IOI2005] 树型dp
正解:树型dp 解题报告: 传送门! 简要题意:有棵树,每个节点有个权值w,要求选k个节点,最大化∑dis*w,其中如果某个节点到根的路径上选了别的节点,dis指的是到达那个节点的距离 首先这个一看就 ...
- hihocoder 1479 三等分 树型dp
描述 小Hi最近参加了一场比赛,这场比赛中小Hi被要求将一棵树拆成3份,使得每一份中所有节点的权值和相等. 比赛结束后,小Hi发现虽然大家得到的树几乎一模一样,但是每个人的方法都有所不同.于是小Hi希 ...
- 蓝桥杯:生命之树【树型dp】
之前本菜还没学树型dp的时候,下意识地认为这个东西很难,感觉这个东西结合了搜索+dp这两座算法界的大山必定很难,但万万没想到啊,这个东西很像我之前讲的记忆化搜索,甚至我认为,记忆化搜索的一个作用就是将 ...
最新文章
- 好奇怪呀后面加什么标点_加标点
- 在Ubuntu中用anaconda快速安装opencv3
- rabbitmq一:基本概念
- 项目--------------使用BiLSTMCRF将病例文本中的诊断数据识别出来
- 微软企业库5.0 学习之路——UnityPIAB 通过配置实现AOP
- 【51单片机快速入门指南】4.4:I2C 读取HMC5883L / QMC5883L 磁力计
- JS - 将十六进制的颜色值转成rgb、rgba格式
- web测试知识点整理
- 用友NC系统安装部署指南
- linux wget 整站克隆/仿站 整个网站的静态源码下载到本地 4种扒站工具(webzip、ha_TeleportPro、Offline Explorer、wget)
- CH340串口驱动的官网下载链接地址(包含各大操作系统平台)
- 深入理解Java虚拟机——Java堆栈跟踪工具(jstack)
- Win10下windows mobile设备中心连接不上的方法无法启动
- 【vpn异地组网专题】爱快ikuai软路由-VM虚拟机安装教程
- 明日复明日,明日何其多;我生待明日,万事成蹉跎
- 【AI数学原理】函数求导(精髓篇)
- 电信宽带华为HG8245光纤猫开路由、WIFI的破解办法
- java正则大写字母_正则表达式 大写字母 怎么匹配
- 1-106兔子繁衍问题
- 荷马史诗【k叉哈夫曼树】
热门文章
- IceSword偏门功能介绍
- java offsetdatetime_Java OffsetDateTime withHour()用法及代码示例
- java swarm集群_52个Java程序员不可或缺的 Docker 工具
- java注解教程 pdf_Java注解详解
- linux命令基础知识 管道流,linux基础知识-I/O重定向,管道(示例代码)
- java获取本周的开始时间和结束时间_创业板注册制开始时间/股票开户流程结束后,怎么炒股?...
- mysql同步数据到另一张表_mysql:Otter跨机房数据同步(单向)
- typecho和wordpress模板了解、开发流程介绍、前台后台前端后端区分
- Linux查看已经开放的端口,开放端口遇到防火墙的问题。
- hadoop集群搭建 修改配置文件(三台主机都要配置)