贴下以前写的代码
比赛前我准备着重看的
主席树 树dp 字符串

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 1e5+5;
const int MOD = 1e9+7; int N;
int A[MAXN];
vector<int> mp[MAXN];
int val[MAXN][2];
/**********President Tree**********/
int tot;
struct Node{
int ls, rs, cc;
Node(int a=0, int b=0, int c=0):ls(a), rs(b), cc(c){}
}tree[MAXN*20];
int sta[MAXN];
int Build(int pos,int l,int r){
int rt = tot++;
tree[rt].cc = 1;
tree[rt].ls = tree[rt].rs = 0;
if(l == r) return rt;
int mid = (l+r) >> 1;
if(pos <= mid) tree[rt].ls = Build(pos, l,mid);
else tree[rt].rs = Build(pos, mid+1,r);
return rt;
}
int Merge(int x,int y,int l,int r){
if(x == 0 || y == 0) return x+y;
tree[x].cc += tree[y].cc;
if(l == r) {
tree[x].ls = tree[x].rs = 0;
return x;
}
int mid = (l+r) >> 1;
tree[x].ls = Merge(tree[x].ls, tree[y].ls, l, mid);
tree[x].rs = Merge(tree[x].rs, tree[y].rs,mid+1, r);
return x;
}
int Query(int rt,int K,int l,int r){
if(tree[rt].cc < K) return 100000;
if(l == r) return l;
int mid = (l+r)>>1;
if(tree[tree[rt].ls].cc >= K) return Query(tree[rt].ls, K, l ,mid);
else return Query(tree[rt].rs, K-tree[tree[rt].ls].cc, mid+1, r);
} void dfs(int x){
sta[x] = Build(A[x], 1, 100000);
for(int i = 0; i < mp[x].size(); ++i){
int y = mp[x][i];
dfs(y);
sta[x] = Merge(sta[x], sta[y], 1, 100000);
}
// printf("%d\n",sta[x]);
val[x][0] = Query(sta[x], tree[sta[x]].cc+1>>1, 1, 100000);
val[x][1] = Query(sta[x], (tree[sta[x]].cc+1>>1)+1, 1, 100000);
}
/**************BIT*************/
ll bitt[MAXN];
void Add(int pos,int num){
for(int i = pos; i > 0; i -= i&-i)
bitt[i] += num;
}
ll Sum(int pos){
ll ans = 0;
for(int i = pos; i <= 100000; i += i&-i)
ans += bitt[i];
return ans;
}
ll dfs2(int x){
Add(val[x][0], val[x][1]-val[x][0]);
ll ans = Sum(val[x][0]);
for(int i = 0; i < mp[x].size(); ++i){
int y = mp[x][i];
ans = max(ans, dfs2(y));
}
Add(val[x][0], val[x][0]-val[x][1]);
return ans;
} int main(){
while(~scanf("%d",&N)){
memset(bitt,0,sizeof(bitt)); tot = 1;
for(int i = 1; i <= N; ++i) scanf("%d",&A[i]);
for(int i = 1; i <= N; ++i) mp[i].clear();
for(int i = 2; i <= N; ++i){
int a; scanf("%d",&a);
mp[a].push_back(i);
}
dfs(1);
ll sum = 0;
for(int i = 1; i <= N; ++i)
sum += val[i][0];
printf("%lld\n", sum + dfs2(1));
}
return 0;
}

hdu5788 level up的更多相关文章

  1. Java compiler level does not match解决方法

    从别的地方导入一个项目的时候,经常会遇到eclipse/Myeclipse报Description  Resource Path Location Type Java compiler level d ...

  2. Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead的解决办法

    今天在导入工程进Eclipse的时候竟然出错了,控制台输出的是: [2013-02-04 22:17:13 - takepicture] Android requires compiler compl ...

  3. Android版本和API Level对应关系

    http://developer.android.com/guide/topics/manifest/uses-sdk-element.html Platform Version       API ...

  4. [LeetCode] Binary Tree Level Order Traversal II 二叉树层序遍历之二

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  5. [LeetCode] Binary Tree Zigzag Level Order Traversal 二叉树的之字形层序遍历

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

  6. [LeetCode] Binary Tree Level Order Traversal 二叉树层序遍历

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  7. Android版本与api Level

    Platform Version API Level VERSION_CODE Notes Android 4.4 19 KITKAT Platform Highlights Android 4.3 ...

  8. Selenium通过WebDriver控制IE浏览器出错 Browser zoom level was set to 109%. It should be set to 100%

    错误信息: WebDriverException: Message: Unexpected error launching Internet Explorer. Browser zoom level ...

  9. pythonchallenge 解谜 Level 8

    #-*- coding:utf-8 -*- #代码版本均为python 3.5.1 #Level 7 import bz2 un=b'BZh91AY&SYA\xaf\x82\r\x00\x00 ...

随机推荐

  1. vue中钩子函数的用法

    这么多钩子函数,我们怎么用呢,我想大家可能有这样的疑问吧,我也有,哈哈哈. beforecreate : 举个栗子:可以在这加个loading事件 created :在这结束loading,还做一些初 ...

  2. BZOJ 2406: 矩阵 [上下界网络流 二分答案]

    2406: 矩阵 题意:自己去看吧,最小化每行每列所有元素与给定矩阵差的和的绝对值中的最大值 又带绝对值又带max不方便直接求 显然可以二分这个最大值 然后判定问题,给定矩阵每行每列的范围和每个元素的 ...

  3. Sql2012数据库还原

    Sql2012数据库还原(通过.bak数据库备份文件) 昨天系统挂了,那叫一个悲惨,重装了系统,但是sql2012的数据没有备份,同事帮忙发来备份文件(.bak),开始还原数据. 步骤:1 自己新建一 ...

  4. ettercap+urlsnarf+driftnet+wireshark监听妹子上网

    搞事肯定得确认目标.所以我们得先确认一个目标 确认目标这种事情不多说.   1.开启IP转发 echo 1 > /proc/sys/net/ipv4/ip_forward 然后ettercap ...

  5. linux常用命令(不断更新)

    睡眠命令(第一步可省去): 1.查看你的系统支持什么模式:cat /sys/power/state(我的系统为:freeze mem disk) 2.切换到管理员模式下,执行命令:echo " ...

  6. 大型互联网公司Java开发岗位面试题归类!

    ​一.Java基础 1. String类为什么是final的. 2. HashMap的源码,实现原理,底层结构. 3. 说说你知道的几个Java集合类:list.set.queue.map实现类咯.. ...

  7. NGUI的新手引导的实现

    先声明一下,UNITY新手,如果说的有不对的地方,欢迎各位大神指正. 最近在项目需要实现新手引导,最基础的需求就是需要一个带黑色遮罩的引导UI,类似下图这种: 对,就是这么敷衍的UI,因为是我随手做的 ...

  8. VUE学习笔记之vue cli 构建项目

    一.环境搭建: 1.安装node.js 从node.js官网下载并安装node,安装过程很简单,一路"下一步"就可以了.安装完成之后,打开命令行工具(win+r,然后输入cmd), ...

  9. 验证SQLServer死锁进程

    SELECT '现在没有阻塞和死锁信息' AS message -- 循环开始WHILE @intCounter <= @intCountProperties BEGIN-- 取第一条记录 SE ...

  10. Yii2 灵活加载js、css

    Yii2.0对于CSS/js 管理,使用AssetBundle资源包类. 视图如何按需加载CSS/JS ? 资源包定义: backend/assets/AppAsset.PHP <?php na ...