bzoj5469 [FJOI2018]领导集团问题
题目描述:
题解:
相当于树上$LIS$问题。
考虑一维情况下的贪心,我们可以用multiset启发式合并搞。
代码:
- #include<set>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int N = ;
- template<typename T>
- inline void read(T&x)
- {
- T f = ,c = ;char ch=getchar();
- while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
- while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
- x = f*c;
- }
- int n,w[N],hed[N],cnt;
- struct EG
- {
- int to,nxt;
- }e[N];
- void ae(int f,int t)
- {
- e[++cnt].to = t;
- e[cnt].nxt = hed[f];
- hed[f] = cnt;
- }
- multiset<int>s[N];
- multiset<int>::iterator it;
- void Merge(int x,int y)
- {
- if(s[x].size()<s[y].size())swap(s[x],s[y]);
- for(it=s[y].begin();it!=s[y].end();it++)s[x].insert(*it);
- }
- void dfs(int u)
- {
- for(int j=hed[u];j;j=e[j].nxt)dfs(e[j].to),Merge(u,e[j].to);
- s[u].insert(w[u]);
- it = s[u].lower_bound(w[u]);
- if(it!=s[u].begin())s[u].erase(--it);
- }
- int main()
- {
- read(n);
- for(int i=;i<=n;i++)read(w[i]);
- for(int f,i=;i<=n;i++)
- read(f),ae(f,i);
- dfs();printf("%d\n",s[].size());
- return ;
- }
bzoj5469 [FJOI2018]领导集团问题的更多相关文章
- 【BZOJ5469】[FJOI2018]领导集团问题(动态规划,线段树合并)
[BZOJ5469][FJOI2018]领导集团问题(动态规划,线段树合并) 题面 BZOJ 洛谷 题解 题目就是让你在树上找一个最大的点集,使得两个点如果存在祖先关系,那么就要满足祖先的权值要小于等 ...
- [FJOI2018]领导集团问题
[FJOI2018]领导集团问题 dp[i][j],i为根子树,最上面的值是j,选择的最大值 观察dp方程 1.整体Dp已经可以做了. 2.考虑优美一些的做法: dp[i]如果对j取后缀最大值,显然是 ...
- [FJOI2018]领导集团问题 mulitset合并
P4577 [FJOI2018]领导集团问题 链接 luogu bzoj 他是个重题 bzoj4919: [Lydsy1706月赛]大根堆 代码改改就过了 思路 求树上的lis,要好好读题目的!!! ...
- P4577 [FJOI2018]领导集团问题
P4577 [FJOI2018]领导集团问题 我们对整棵树进行dfs遍历,并用一个multiset维护对于每个点,它的子树可取的最大点集. 我们遍历到点$u$时: 不选点$u$,显然答案就为它的所有子 ...
- 5469: [FJOI2018]领导集团问题
5469: [FJOI2018]领导集团问题 链接 题意: 要求在一棵树内选一个子集,满足子集内的任意两个点u,v,如果u是v的祖先,那么u的权值小于等于v. 分析: dp[u][i]表示在u的子树内 ...
- 题解-FJOI2018 领导集团问题
题面 FJOI2018 领导集团问题 给一棵树 \(T(|T|=n)\),每个点有个权值 \(w_i\),从中选出一个子点集 \(P=\{x\in {\rm node}|x\in T\}\),使得 \ ...
- 「题解报告」P4577 [FJOI2018]领导集团问题
题解 P4577 [FJOI2018]领导集团问题 题解区好像没有线段树上又套了二分的做法,于是就有了这片题解. 题目传送门 怀着必 WA 的决心交了两发,一不小心就过了. 题意 求一个树上最长不下降 ...
- 洛谷P4577 [FJOI2018]领导集团问题(dp 线段树合并)
题意 题目链接 Sol 首先不难想到一个dp,设\(f[i][j]\)表示\(i\)的子树内选择的最小值至少为\(j\)的最大个数 转移的时候维护一个后缀\(mx\)然后直接加 因为后缀max是单调不 ...
- 洛谷4577 & LOJ2521:[FJOI2018]领导集团问题——题解
https://www.luogu.org/problemnew/show/P4577 https://loj.ac/problem/2521 参考:https://www.luogu.org/blo ...
随机推荐
- 商务系统的构造思路(无源码!)+如何用jsp实现点击单选框内容显示在另一个jsp页面
敲码经验总结: 之前犯了一个错误就是,没有从底层开始学起,有啥问题,就直接博客园找源码,去CSDN找源代码,看到代码就复制粘贴,结果从新梳理知识点的时候,貌似除了复制粘贴,印象深刻的知识啥也没学到. ...
- Centos 7.x 安装 MongoDB
官方安装资料:点击直达 本次以Centos为安装主机 1:首先先导入MongoDB的yum源,因为Centos默认是没有MongoDB的yum源,创建文件:/etc/yum.repos.d/mongo ...
- Info.plist权限设置
<!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问 ...
- matplotlib 学习笔记02:marker标记详解
本文内容来自于matplotlib官网:matplotlib官网markers资料 This module contains functions to handle markers. Used by ...
- Java中的list与Set、Map区别及适用场景
Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类,但是却让其被继承产生了两个接口,就是Set和List.Set中不能包含重复的元素.List是一个有序的集合,可以包含 ...
- java.lang.IllegalArgumentException: Illegal character in query at index ...解决办法
今天在写智能机器人问答实现的时候遇到了一个问题,就是我发送消息不能输入空格 给我报了一个错误java.lang.IllegalArgumentException: Illegal character ...
- MvcPager无刷新分页,包含搜索和跳转功能
1.MVC无刷新分页和搜索(第一版) http://pan.baidu.com/s/1eRQ7Ml8 密码:uqf7 出现的问题: 1)程序不走判断条件一直为false, 错误原因:1)可能没有引 ...
- body和普通div背景图宽高百分比的区别
body和普通div背景图的区别 background: url(//m.360buyimg.com/mobilecms/s220x220_jfs/t2746/167/831241799/29915 ...
- 安卓6.0之前的系统 判断app是否有录音权限
public static synchronized boolean isVoicePermission() { AudioRecord record = null; try { record = n ...
- 限制UITextField输入长度
如果要限制UITextField输入长度最长不超过kMaxLength,那么需要实现做以下操作: 1.实现UITextFieldDelegate协议: 2.实现textField:shouldChan ...