【BZOJ5499】[2019省队联测]春节十二响(贪心)

题面

BZOJ

洛谷

题解

如果是一条折链,显然维护两侧的值,每次两个堆分别弹出一个\(max\)然后合并一下,最后再放回去就可以了。

那么现在回到一棵树上,可以认为就是本身有一条链,现在每次要合并一条链进来,那么拿一个堆维护这个合并过程就可以了。为了保证复杂度用启发式合并。

在\(C++11\)下可以直接使用\(.swap()\)函数来进行优先队列的交换。

为了在\(BZOJ\)上过就写的普通的启发式合并。

#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
#define MAX 200200
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,M[MAX];long long ans;
priority_queue<int> S[MAX];
struct Line{int v,next;}e[MAX];
int h[MAX],cnt=1;
inline void Add(int u,int v){e[cnt]=(Line){v,h[u]};h[u]=cnt++;}
int ID[MAX];
void dfs(int u)
{
ID[u]=u;
for(int i=h[u];i;i=e[i].next)
{
int v=e[i].v;dfs(v);
if(S[ID[v]].size()>S[ID[u]].size())swap(ID[u],ID[v]);
vector<int> tmp;
while(!S[ID[v]].empty())tmp.push_back(max(S[ID[u]].top(),S[ID[v]].top())),S[ID[u]].pop(),S[ID[v]].pop();
while(!tmp.empty())S[ID[u]].push(tmp.back()),tmp.pop_back();
}
S[ID[u]].push(M[u]);
}
/*
void dfs(int u)
{
for(int i=h[u];i;i=e[i].next)
{
int v=e[i].v;dfs(v);
if(S[v].size()>S[u].size())S[u].swap(S[v]);
vector<int> tmp;
while(!S[v].empty())tmp.push_back(max(S[u].top(),S[v].top())),S[u].pop(),S[v].pop();
while(!tmp.empty())S[u].push(tmp.back()),tmp.pop_back();
}
S[u].push(M[u]);
}
*/
int main()
{
n=read();
for(int i=1;i<=n;++i)M[i]=read();
for(int i=2;i<=n;++i)Add(read(),i);
dfs(1);
while(!S[ID[1]].empty())ans+=S[ID[1]].top(),S[ID[1]].pop();
printf("%lld\n",ans);
return 0;
}

【BZOJ5499】[2019省队联测]春节十二响(贪心)的更多相关文章

  1. bzoj 5499: [2019省队联测]春节十二响【堆】

    首先看两条链怎么合并,贪心可得是从大到小取max,多条链同理 所以dfs合并子树的大根堆即可,注意为了保证复杂度,合并的时候要合并到最长链上,证明见长链剖分 #include<iostream& ...

  2. BZOJ 5494: [2019省队联测]春节十二响 (左偏树 可并堆)

    题意 略 分析 稍微yy一下可以感觉就是一个不同子树合并堆,然后考场上写了一发左偏树,以为100分美滋滋.然而发现自己傻逼了,两个堆一一对应合并后剩下的一坨直接一次合并进去就行了.然鹅我这个sb把所有 ...

  3. P5290 [十二省联考2019]春节十二响

    题目地址:P5290 [十二省联考2019]春节十二响 骗分方法 如果你实在一点思路也没有,暴力都不会打,那么请考虑一下骗分. 方法一 输出所有 \(M\) 的和. 期望得分:0分. 实际还有5分 方 ...

  4. P5290 [十二省联考2019]春节十二响(堆+启发式合并)

    P5290 [十二省联考2019]春节十二响 从特殊到一般 我们先看链的情况. 我们把点$1$左右的两条子链分别扔入堆里 每次取出两个堆的最大值,把答案累加上更大的那个(另一堆为空则直接加上去). 那 ...

  5. Luogu P5290 / LOJ3052 【[十二省联考2019]春节十二响】

    联考Day2T2...多亏有这题...让我水了85精准翻盘进了A队... 题目大意: 挺简单的就不说了吧...(这怎么简述啊) 题目思路: 看到题的时候想了半天,不知道怎么搞.把样例画到演草纸上之后又 ...

  6. Luogu P5290 [十二省联考2019]春节十二响

    这题是最近看到的今年省选题中最良心的一道了吧 看题+想题+写题都可以在0.5h内解决,送分含义明显啊 首先理解了题意后我们很快就能发现两个点如果要被分在一段那么必须在它们的祖先处合并 首先我们考虑下二 ...

  7. [十二省联考2019]D2T2春节十二响

    嘟嘟嘟 这题真没想到这么简单-- 首先有60分大礼:\(O(n ^ 2logn)\)贪心.(我也不知道为啥就是对的) 然后又送15分链:维护两个堆,每次去堆顶的最大值. 这时候得到75分已经很开心了, ...

  8. Luogu5290 十二省联考2019春节十二响(贪心+启发式合并)

    考虑链的做法,显然将两部分各自从大到小排序后逐位取max即可,最后将根计入.猜想树上做法相同,即按上述方式逐个合并子树,最后加入根.用multiset启发式合并即可维护.因为每次合并后较小集合会消失, ...

  9. 「洛谷5290」「LOJ3052」「十二省联考 2019」春节十二响【启发式合并】

    题目链接 [洛谷传送门] [LOJ传送门] 题目大意 给定一棵树,每次选取树上的一个点集,要求点集中的每个点不能是另一个点的祖先,选出点集的代价为点集中权值最大点的权值,问将所有点都选一遍的最小代价为 ...

随机推荐

  1. C# 使用NPOI出现超过最大字体数和单元格格式变成一样的解决

    在使用NPOI写入Excel文件的时候出现“它已经超出最多允许的字体数”,查询资料发现是字体创建太多的原因,需要将常用字体创建好,传入CellStyle中.参考(http://www.cnblogs. ...

  2. 查询SQLSERVER执行过的SQL记录(历史查询记录)

    有的时候,需要知道近段时间SQLSERVER执行了什么语句,可以用下面的方法: SELECT TOP 1000 QS.creation_time, SUBSTRING(ST.text, (QS.sta ...

  3. pthread_exit在main线程中的用处

    在main线程中调用pthread_exit会起到只让main线程退出,但是保留进程资源,供其他由main创建的线程使用,直至所有线程都结束,但在其他线程中不会有这种效果 https://stacko ...

  4. docker安装wnameless/oracle-xe-11g并运行(手写超详细)

    前景:没事想玩下linux,想着以后可以部署下自己的web项目上去,然后我就想装个oracle来着...之前都不懂linux来着,只知道公司的项目都是部署在上面,然后从装系统到装完oracle用了近五 ...

  5. 【自动化测试&爬虫系列】Selenium Webdriver

    文章来源:公众号-智能化IT系统. 一. Selenium Webdriver技术介绍 1. 简介 selenium Webdriver是一套针对不同浏览器而开发的web应用自动化测试代码库.使用这套 ...

  6. python之生成随机密码

    https://www.cnblogs.com/evablogs/p/7096583.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/usr/bin/py ...

  7. 爬虫之scrapy--基本操作

    参考博客  :https://www.cnblogs.com/wupeiqi/p/6229292.html Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘, ...

  8. MySql 学习之路-高级2

    目录: 1.约束 2.ALTER TABLE 3.VIEW 1.约束 说明:SQL约束用于规定表中的数据规则,如果存在违反约束的数据行为,行为会被约束终止,约束可以在建表是规定,也可以在建表后规定,通 ...

  9. Python爬虫【解析库之beautifulsoup】

    解析库的安装 pip3 install beautifulsoup4 初始化 BeautifulSoup(str,"解析库") from bs4 import BeautifulS ...

  10. Starting sshd: /var/empty/sshd must be owned by root and not group or world-writable.

    Starting sshd: /var/empty/sshd must be owned by root and not group or world-writable.      [FAILED] ...