题意

分析

稍微yy一下可以感觉就是一个不同子树合并堆,然后考场上写了一发左偏树,以为100分美滋滋.然而发现自己傻逼了,两个堆一一对应合并后剩下的一坨直接一次合并进去就行了.然鹅我这个sb把所有元素pop一次再merge进去…然后就O(n2)O(n^2)O(n2) 60分滚粗了…

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

时间复杂度分析:

  • 每个点只会被pop出去一次,pop的时候伴随了一次pop一次merge.
  • 每一对父子关系merge了一次

所以时间复杂度是O(nlogn)O(nlogn)O(nlogn)的.

CODE

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
char cb[1<<15],*cs=cb,*ct=cb;
#define getc() (cs==ct&&(ct=(cs=cb)+fread(cb,1,1<<15,stdin),cs==ct)?0:*cs++)
template<class T>inline void read(T &res) {
char ch; while(!isdigit(ch=getchar()));
for(res=ch-'0';isdigit(ch=getchar());res=res*10+ch-'0');
}
const int MAXN = 200005;
int n, w[MAXN], fir[MAXN], to[MAXN], nxt[MAXN], cnt;
inline void add(int u, int v) { to[++cnt] = v; nxt[cnt] = fir[u]; fir[u] = cnt; }
struct LT {
int ls, rs, dis;
}t[MAXN];
inline int merge(int x, int y) {
if(!x || !y) return x + y;
if(w[x] < w[y]) swap(x, y);
t[x].rs = merge(t[x].rs, y);
if(t[t[x].rs].dis > t[t[x].ls].dis)
swap(t[x].ls, t[x].rs);
t[x].dis = t[t[x].rs].dis + 1;
return x;
}
inline int pop(int x) {
int l = t[x].ls, r = t[x].rs;
t[x].dis = t[x].ls = t[x].rs = 0;
return merge(l, r);
}
inline int dfs(int x) {
int u = 0, tmp;
t[x].dis = t[x].ls = t[x].rs = 0;
for(int i = fir[x], v; i; i = nxt[i]) {
v = dfs(to[i]);
tmp = 0;
while(u && v) {
int tmp1 = u; u = pop(u);
int tmp2 = v; v = pop(v);
tmp = merge(tmp, w[tmp1] > w[tmp2] ? tmp1 : tmp2);
}
if(u) tmp = merge(tmp, u);//就是这里我 sb地 pop出来又 push进去
if(v) tmp = merge(tmp, v);
u = tmp;
}
return merge(u, x);
}
int main () {
read(n);
for(int i = 1; i <= n; ++i) read(w[i]);
for(int i = 2, x; i <= n; ++i) read(x), add(x, i);
t[0].dis = -1;
int rt = dfs(1);
LL ans = 0;
while(rt) ans += w[rt], rt = pop(rt);
printf("%lld\n", ans);
}

最新文章

  1. 高精度快速预览打开dwg文件的CAD控件CAD Image DLL介绍及下载
  2. [原创][LaTex]汇总博文
  3. Hadoop 如何查看是否32位
  4. zookeeper节点Watch机制实例展示
  5. ural 1244. Gentlemen
  6. Centos7 安装配置NFS
  7. Access“存储过程&quot;参数顺序要与执行代码生成的参数顺序一致
  8. signal()函数
  9. UVa 12661 (单源最短路) Funny Car Racing
  10. How to use Oprofile tool to analysis program&#39;s performance
  11. data structure online video
  12. GPS定位学习笔记
  13. Eclipse用法和技巧二十四:当git遇上eclipse
  14. linux 下vi中关于删除某段,某行,或者全部删除的命令
  15. 你不知的DOM编程
  16. python Is 与== 的坑
  17. 那些年,我们追过的RPC
  18. python - psutil 系统信息模块
  19. Python基础-python数据类型之字符串(四)
  20. django网页分页

热门文章

  1. 为什么 Python 中的 True 等于 1
  2. CSV文件导入数据库和导出数据库
  3. python-django-天天生鲜项目
  4. redis源码解读--内存分配zmalloc
  5. css之实现下拉框自上而下展开动画效果&amp;&amp;自下而上收起动画效果
  6. 轻松搭建CAS 5.x系列(6)-在CAS Server上增加OAuth2.0协议
  7. (四)Activiti之流程定义部署之ZIP方式和流程定义查询
  8. AngularJS视图 ng-view
  9. 谷歌(google)广告尺寸大小列表
  10. linux gcc安装