bzoj 5499: [2019省队联测]春节十二响【堆】
首先看两条链怎么合并,贪心可得是从大到小取max,多条链同理
所以dfs合并子树的大根堆即可,注意为了保证复杂度,合并的时候要合并到最长链上,证明见长链剖分
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int N=200005;
int n,a[N],h[N],cnt,id[N],tot,p[N];
long long ans;
priority_queue<int>q[N];
struct qwe
{
	int ne,to;
}e[N<<1];
int read()
{
	int r=0,f=1;
	char p=getchar();
	while(p>'9'||p<'0')
	{
		if(p=='-')
			f=-1;
		p=getchar();
	}
	while(p>='0'&&p<='9')
	{
		r=r*10+p-48;
		p=getchar();
	}
	return r*f;
}
void add(int u,int v)
{
	cnt++;
	e[cnt].ne=h[u];
	e[cnt].to=v;
	h[u]=cnt;
}
void dfs(int u)
{//cerr<<u<<endl;
	id[u]=++tot;
	for(int i=h[u];i;i=e[i].ne)
	{
		dfs(e[i].to);
		if(q[id[e[i].to]].size()>q[id[u]].size())
			swap(id[e[i].to],id[u]);
		int len=q[id[e[i].to]].size();
		for(int j=1;j<=len;j++)
		{
			p[j]=max(q[id[e[i].to]].top(),q[id[u]].top());
			q[id[e[i].to]].pop();
			q[id[u]].pop();
		}
		for(int j=1;j<=len;j++)
			q[id[u]].push(p[j]);
	}
	q[id[u]].push(a[u]);
}
int main()
{
	n=read();
	for(int i=1;i<=n;i++)
		a[i]=read();
	for(int i=2;i<=n;i++)
	{
		int x=read();
		add(x,i);
	}
	dfs(1);
	while(!q[id[1]].empty())
		ans+=q[id[1]].top(),q[id[1]].pop();
	printf("%lld\n",ans);
	return 0;
}
bzoj 5499: [2019省队联测]春节十二响【堆】的更多相关文章
- BZOJ 5494: [2019省队联测]春节十二响 (左偏树 可并堆)
		题意 略 分析 稍微yy一下可以感觉就是一个不同子树合并堆,然后考场上写了一发左偏树,以为100分美滋滋.然而发现自己傻逼了,两个堆一一对应合并后剩下的一坨直接一次合并进去就行了.然鹅我这个sb把所有 ... 
- 【BZOJ5499】[2019省队联测]春节十二响(贪心)
		[BZOJ5499][2019省队联测]春节十二响(贪心) 题面 BZOJ 洛谷 题解 如果是一条折链,显然维护两侧的值,每次两个堆分别弹出一个\(max\)然后合并一下,最后再放回去就可以了. 那么 ... 
- P5290 [十二省联考2019]春节十二响
		题目地址:P5290 [十二省联考2019]春节十二响 骗分方法 如果你实在一点思路也没有,暴力都不会打,那么请考虑一下骗分. 方法一 输出所有 \(M\) 的和. 期望得分:0分. 实际还有5分 方 ... 
- P5290 [十二省联考2019]春节十二响(堆+启发式合并)
		P5290 [十二省联考2019]春节十二响 从特殊到一般 我们先看链的情况. 我们把点$1$左右的两条子链分别扔入堆里 每次取出两个堆的最大值,把答案累加上更大的那个(另一堆为空则直接加上去). 那 ... 
- BZOJ 5495: [2019省队联测]异或粽子 (trie树)
		这题果然是原题[BZOJ 3689 异或之].看了BZOJ原题题解,发现自己sb了,直接每个位置维护一个值保存找到了以这个位置为右端点的第几大,初始全部都是1,把每个位置作为右端点能够异或出来的最大值 ... 
- bzoj 5498: [2019省队联测]皮配【dp】
		是个神仙dp-- 参考:https://www.luogu.org/blog/xzz-233/solution-p5289 设f[i][j][k]是前i个有限制的城市,所有学校中选蓝色阵营有j人,有限 ... 
- bzoj 5496: [2019省队联测]字符串问题【SAM+拓扑】
		有一个想法就是暴力建图,把每个A向有和他相连的B前缀的A,然后拓扑一下,这样的图是n^2的: 考虑优化建图,因为大部分数据结构都是处理后缀的,所以把串反过来,题目中要求的前缀B就变成了后缀B 建立SA ... 
- bzoj 5495: [2019省队联测]异或粽子【可持久化trie+大根堆】
		和bzoj4504差不多,就是换了个数据结构 像超级钢琴一样把五元组放进大根堆,每次取一个出来拆开,(d,l,r,p,v)表示右端点为d,左端点区间为(l,r),最大区间和值为v左端点在p上 关于怎么 ... 
- BZOJ 5495: [2019省队联测]异或粽子 可持久化trie+堆
		和超级钢琴,异或之三倍经验 $?$ 堆+贪心素质三连 $?$ 好无聊...... code: #include <bits/stdc++.h> #define N 500006 #defi ... 
随机推荐
- HDU 3820 Golden Eggs( 最小割   奇特建图)经典
			Golden Eggs Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ... 
- 【转载】关于C#静态构造函数的几点说明
			一.定义 静态构造函数是C#的一个新特性,其实好像很少用到.不过当我们想初始化一些静态变量的时候就需要用到它了.这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次.也就是在 ... 
- MergeLinklist
			写了一个合并有序链表,代码有点纠结啊.涉及到指针就是麻烦,DS课曹老师课件说linklist是DS的难点. . . 假设数组就非常easy了.链表就要小心. 里面遇到的一些情况.第一.最好是先确定l1 ... 
- 横跨十年CPU架构回顾
			http://cpu.zol.com.cn/209/2092791_all.html#p2092791 本文导航 第1页:K7架构 打开AMD崛起大门的钥匙 第2页:玩破解 K7时代便已经拥有 第3页 ... 
- 光纤与PON基础概念整理
			近期有幸接触到通讯这一领域,此文专门用于整理记录. 首先是光纤与光缆 光纤(OpticalFiber,OF)是用来导光的透明介质纤维,一根有用化的光纤是由多层透明介质构成,一般能够分为三部分:折射率 ... 
- 阿里云安装nginx 启动失败的原因。
			阿里云编译安装nginx服务器后启动一直报下面错误. 百度了一圈,看到一个说要先关掉apache服务,感觉这个好像是对的,立马做了下面操作. 果然把nginx起了起来. 从这边才知道apache和ng ... 
- java  调用ant的自己定义task,默认不是build.xml 的一点问题
			java 调用ant的自己定义task, File buildFile = new File(".//ee-build.xml"); // 创建一个ANT项目 ... 
- Spring Boot 动态数据源(多数据源自己主动切换)
			本文实现案例场景: 某系统除了须要从自己的主要数据库上读取和管理数据外.另一部分业务涉及到其它多个数据库,要求能够在不论什么方法上能够灵活指定详细要操作的数据库. 为了在开发中以最简单的方法使用,本文 ... 
- django-sso单点登陆的实现
			环境准备 环境规格: python3.5 django2.0 django-simple-sso-0.14 环境安装: pip install django-simple-sso-0.14 环境说明: ... 
- 织梦dedecms首页/列表页/内容页调用tag的方法(未测试)
			织梦dedecms首页/列表页/内容页调用tag的方法 在网站中tag是网站搜索相关文章的联系之一,也可以有专门的tag页面,在不同的页面也可以调用tag,而不是只有在首页和列表页才可以调用tag,这 ... 
