【 Codeforces Round #551 (Div. 2) D】Serval and Rooted Tree【树形DP】
题意:
给定一棵nnn个节点的树,每个点有一个标志fff,f=1f = 1f=1表示该节点权值等于子节点中权值最大值,f=0f=0f=0表示该节点权值等于子节点权值中权值最小值。假如这棵树中有kkk个叶子节点,则可以对这kkk个叶子节点进行赋值,分别为1−k1-k1−k,不得重复。问根节点权值的最大值为多少。
思路:
这貌似是一个典型的树形DP问题,但是比赛的时候我还是没做出来,菜哭…
本题最直接的思路就是dp[x]dp[x]dp[x]表示节点xxx能够达到的最大值,但是很明显,这样定义的话不好转移,因为填的数是未知的。因此我们可以改为dp[x]=kdp[x]=kdp[x]=k表示节点xxx能够达到的xxx子树中叶子节点的第kkk大。这个定义式其实与一开始的差别不大,但是现在的定义更好转移。
如果xxx节点为叶子节点,显然dp[x]=1dp[x] = 1dp[x]=1。如果xxx节点取子节点的最大值,则dp[x]=min(dp[y])dp[x] = min(dp[y])dp[x]=min(dp[y]),yyy为xxx子节点。如果xxx节点取子节点最小值,则dp[x]=∑dp[y]dp[x]=\sum dp[y]dp[x]=∑dp[y],yyy为xxx的子节点。然后直接dpdpdp即可完成此题。
总结:
此题的主要特点就是dpdpdp定义式中表示的是一个比较的关系,不同于之前的具体数值,而是表示可选范围中的第kkk大。
代码:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define LOG1(x1,x2) cout << x1 << ": " << x2 << endl;
#define LOG2(x1,x2,y1,y2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << endl;
#define LOG3(x1,x2,y1,y2,z1,z2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << " , " << z1 << ": " << z2 << endl;
typedef long long ll;
typedef double db;
const int N = 3*1e5+100;
const int M = 6*1e5+100;
const db EPS = 1e-9;
using namespace std;int n,head[N],tot,c[N],d[N],ans;
struct Edge{int to,next;
}e[M];void add(int x,int y){e[++tot].to = y, e[tot].next = head[x], head[x] = tot;
} void dfs(int x,int fa){int sum = 0, minn = 1e6;for(int i = head[x]; i; i = e[i].next){int y = e[i].to;if(y == fa) continue;dfs(y,x); sum += d[y], minn = min(minn,d[y]);}if(minn == 1e6) d[x] = 1, ans++;else if(c[x]) d[x] = minn;else d[x] = sum;
}int main()
{scanf("%d",&n); tot = 1;rep(i,1,n) scanf("%d",&c[i]);rep(i,2,n){int xx; scanf("%d",&xx);add(xx,i); add(i,xx);}dfs(1,-1);printf("%d\n",ans-d[1]+1);return 0;
}
【 Codeforces Round #551 (Div. 2) D】Serval and Rooted Tree【树形DP】相关推荐
- Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp
Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以 ...
- Codeforces Round #579 (Div. 3) F2. Complete the Projects (hard version) dp + 贪心
传送门 文章目录 题意: 思路: 题意: 思路: 排序方式跟easyeasyeasy版本的一样,但是hardhardhard版本是输出最多能选多少,所以我们对b<0b<0b<0的情况 ...
- Codeforces Round #590 (Div. 3) F. Yet Another Substring Reverse 子集dp
传送门 文章目录 题意: 思路: 题意: 思路: 之前做过类似的题,翻转一个字串相当于将任意两个不相交的串连在一起.再一看字符集≤20\le20≤20,那就是铁子集dpdpdp了. 定义f[i]f[i ...
- Codeforces Round #598 (Div. 3) E. Yet Another Division Into Teams dp + 输出方案
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的序列aaa,你需要将其分成若干组,每组的价值为max(ai)−min(ai)\max(a_i)-min(a_i)max(ai)−mi ...
- Codeforces Round #599 (Div. 2) E. Sum Balance 图转换 + 子集dp + 环
传送门 文章目录 题意: 思路: 题意: 思路: 首先我们知道如果所有数的和summodk!=0sum\bmod k!=0summodk!=0那么此时无解,否则我们设need=sum/kneed=su ...
- Codeforces Round #635 (Div. 1) C. Kaavi and Magic Spell 区间dp
传送门 文章目录 题意: 思路: 题意: 给你两个串s,ts,ts,t,每次都可以从sss的开头拿一个字符放到AAA串的开头或结尾,问最终有多少种方案使得ttt是AAA的前缀,注意sss不必全部拿完. ...
- Codeforces Round #674 (Div. 3) F. Number of Subsequences 简单计数dp
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的串,包含a,b,c,?a,b,c,?a,b,c,?四种字符,其中???可以变成为a,b,ca,b,ca,b,c的任意一种,让你求abca ...
- Codeforces Round #624 (Div. 3) E. Construct the Binary Tree 思维 + 构造
传送门 文章目录 题意: 思路: 题意: 给你n,dn,dn,d,让你构造有nnn个点的二叉树,他们每个节点深度和为ddd. n,d≤3000n,d\le 3000n,d≤3000. 思路: 先考虑不 ...
- Codeforces Round #622 (Div. 2) D. Happy New Year 状压dp
传送门 文章目录 题意: 思路: 题意: n≤1e5,m≤1e9,k≤8.n\le 1e5,m\le 1e9,k\le 8.n≤1e5,m≤1e9,k≤8. 思路: 注意到题目中保证了每个孩子至多收到 ...
- Codeforces Round #617 (Div. 3) E2. String Coloring (hard version) 思维 + dp + Dilworth定理
传送门 文章目录 题意: 思路: 题意: 让你给一个串染色,不同颜色且相邻的一对字符可以互换位置,用最少的颜色,使交换后这个字符串字典序最小. 思路: 考虑将字符串分成若干个非递减的子序列,由于其非递 ...
最新文章
- UI设计师培训入门都需要学习什么技术?
- c语言查找功能的怎么使用方法,求C语言实现查询功能(如果选择3,如何实现查询)...
- iview标签页的点击方法_18页PPT:6个高手常用的自我介绍套路,很是得人心,学习...
- Node中的fs模块
- sqli-lab———writeup(11~17)
- socket中的几个数据结构
- win10 wsl和wsl2使用总结
- 自己编写DLL文件——注册——VB工程引用——标准EXE调用(含例子)
- 中国节能装备与产品市场“十四五”规划及2035年远景目标建议报2022-2028年
- python-opencv-使图片更清晰的几种方法
- 小程序毕业设计 基于微信鲜花花店商城小程序毕业设计开题报告功能参考
- Google账号找回通用方法(尤其是知道账号密码仍无法登录和找回的)
- 计算机纳入高考作文,高考作文听人家说今年的高考作文是用计算机批 – 手机爱问...
- python如何根据数据画散点图_用python绘制散点图
- 四面体棱切球的一些特殊正弦定理及其几何性质
- Linux攻关之基础模块九 系统基本权限
- 【论文阅读】SISR综述:From Beginner to Master: A Survey for Deep Learning-based Single-Image Super-Resolution
- Python之urlparse模块
- SAP MM 物料主数据-物料版次-基础应用
- 网络推广-方法和技巧
热门文章
- Servlet技术详解
- Java设计person类,有姓名,年龄,性别。要求:该类至多只能创建一男,一女两个对象。
- 关于ping与tracert网络命令详解
- python os.path.splitext()的用法_Python中的os.path路径模块中的操作方法总结
- 最全计算机基础知识竞赛试题及答案,计算机基础知识竞赛试题.doc
- 【BZOJ2460】元素(线性基---(id,value)绑定,求id异或非0对应的最大value 和)
- 【浙江省第16届省赛E:】Sequence in the Pocket(思维--不模拟复杂过程)
- 【UVA725】Division(暴力求解--水题)
- 机器学习建模商务合作
- Python入门经典(2K超清)