首页 > 其他分享 >[BZOJ4919]大根堆 解题报告

[BZOJ4919]大根堆 解题报告

时间:2022-09-01 21:34:36浏览次数:70  
标签:大根堆 BZOJ4919 一个 int 解题 LIS 节点

[BZOJ4919]大根堆

Description

给定一棵\(n\)个节点的有根树,编号依次为\(1\)到\(n\),其中\(1\)号点为根节点。每个点有一个权值\(v_i\)。

你需要将这棵树转化成一个大根堆。确切地说,你需要选择尽可能多的节点,满足大根堆的性质:对于任意两个点\(i,j\),如果i在树上是j的祖先,那么\(v_i>v_j\)。

请计算可选的最多的点数,注意这些点不必形成这棵树的一个连通子树。

Input

第一行包含一个正整数\(n\)(\(1<=n<=200000\)),表示节点的个数。

接下来\(n\)行,每行两个整数\(v_i,p_i\)(\(0<=v_i<=10^9,1<=p_i < i,p_1=0\)),表示每个节点的权值与父亲。

Output

输出一行一个正整数,即最多的点数。

solution

链的情况,不难发现就是LIS的长度

LIS有一个二分的做法

LIS的O(nlogn)算法(二分)

依照这个思路,我们将问题放在树上

将dp数组\(f\)换成一个一个multiset

multiset用法总结

当回溯到\(x\)时,将\(x\)的所有儿子的\(f_y\)加入到\(f_x\)中,然后再考虑加入一个\(v_u\)。。。

时间复杂度为\(O(nlogn)\),足以通过此题

code

void dfs(int x){
	int fg=0;
	for(int i=hd[x];i;i=nxt[i]){
		int y=to[i];
		dfs(y);
		if(f[x].size()<=f[y].size()){
			swap(f[y],f[x]);
		}
		for(auto i:f[y])f[x].insert(i);
		fg=1;
		f[y].clear();
	}
	if(!fg)f[x].insert(a[x]);
	else{
		auto y=f[x].lower_bound(a[x]);
		if(y!=f[x].end())f[x].erase(y);
		f[x].insert(a[x]);
	}
}
int main(){
	scanf("%d",&n); 
	for(int i=1;i<=n;i++){
		scanf("%d%d",&x,&y);
		a[i]=x;
		if(y)add(y,i);
	}
	dfs(1);
	printf("%d",(int)f[1].size());
	return 0;
}

完结撒花❀

★,°:.☆( ̄▽ ̄)/$:.°★

标签:大根堆,BZOJ4919,一个,int,解题,LIS,节点
From: https://www.cnblogs.com/Aurora1217/p/16647892.html

相关文章

  • luoguP4824 [USACO15FEB] Censoring S 解题报告
    血的教训。。。传送门题意FJ已经根据杂志的所有文字,创建了一个字符串$S$($S$的长度保证不超过$10^6$),他想删除其中的子串$T$,他将删去$S$......
  • [JOI 2015 Final]舞会 解题报告
    [JOI2015Final]舞会题目描述IOI王国为了庆祝JOI公主的生日,举行了舞会。预定有 N 位贵族要参加舞会。 N 是奇数。将贵族们从 \(1\) 到 \(N\) 编号。每个贵......
  • CF739C Alyona and towers 解题报告
    线段树绝世好题。题意:维护区间加,全局最长单峰序列。Solution:维护\(8\)个量。\(lval\):左端点的权值。\(rval\):右端点的权值。\(lmax\):以左端点开始的最长的下降序......
  • 2022 杭电多校解题报告 第一场
    B.Dragonslayer(二进制枚举+bfs)题意:给定一个n*m的网格,视格子中间为点,格线为墙,指定x堵墙(x<=15),穿过一堵墙耗费一体力,问从起点到终点的最小体力为多少分析:注意到......
  • 2022牛客暑期多校集训解题报告 第一场
    A.Villages:Landlines题意:给定n-1个建筑和一个发电站,分布在一个一维的数轴上,这n-1个建筑都有各自的电力接受范围,不连通的建筑可以通过电相连,问使每个建筑都通上电......
  • WireShark 学习及CTF MISC解题
    序号  题目名称  考点  题目URL1  流量分析2  HTTP状态码206  https://adworld.xctf.org.cn/challenges/details?hash=5f9a4d36-13c6-11ed-9827......
  • 「PKUSC2021」Sum Transformation 解题报告
    题目描述定义矩阵变换 \(F(P)=Q\),其中 \(P\) 和 \(Q\) 是\(n×n\) 的矩阵且满足 \(Q_{i,j}=(\sum^{n}_{k=1}P_{k,j}+\sum_{k=1}^nP_{i,k})mod\spacep\)。给定 \(......
  • 解题报告——P3477 [POI2008]PER-Permutation
    这道题如果不是任意模数的话还是比较平凡的(这道题的式子其实很好推,根据康托展开的思路,一位一位考虑,只不过是多重集,可能有重复情况,排除即可,每一位的式子为:\[ans_i=\dfrac{......
  • 汉堡 解题报告
    以下计算时间复杂度时,认为\(p,q,m,n\)同阶。做法1:DP观察到基底和奶油是相互独立的,每一种材料选一块插猫耳插饰。在这里以计算基底为例,奶油同理,用乘法原理计算就行,注......
  • 「JXOI2018」游戏 解题报告
    [JXOI2018]游戏传送门题目背景九条可怜是一个富有的女孩子。题目描述她长大以后创业了,开了一个公司。但是管理公司是一个很累人的活,员工们经常背着可怜偷懒,可怜需要......