[USACO17JAN] 晋升者计数 dfs序+树状数组
[USACO17JAN] 晋升者计数 dfs序+树状数组
题意:一棵有点权的树,找出树中所有\((u,v)\)的对数,其中\(u,v\)满足\(val(u)\le val(v)\)并且\(u\)为\(v\)的祖先。
本来想用dfs序+主席树做,每次查询\(u\)在其子树的大小排名,但是因为不熟写挂了,以后填坑
瞄了一眼题解,发现树状数组就可以水过,仿照查询逆序对的思路,离散化后,每次在dfs子树前存一个\(sum1\),表示比当前节点大的个数,遍历完子树后再算出\(sum2\),当前答案显然为\(sum2-sum1\)
#include <cstdio>
#include <algorithm>
#define MAXN 100010
#define lowbit(x) ((x)&(-(x)))
using namespace std;
int n;
int tre[MAXN];
int head[MAXN],nxt[MAXN*2],vv[MAXN],tot;
inline void add_edge(int u, int v){
vv[++tot]=v;
nxt[tot]=head[u];
head[u]=tot;
}
void add(int x, int val){
for(int i=x;i<=n;i+=lowbit(i))
tre[i]+=val;
}
int get_sum(int x){
int ans=0;
for(int i=x;i>0;i-=lowbit(i))
ans+=tre[i];
return ans;
}
struct nod{
int val, ord;
} cow[MAXN];
int ran[MAXN];
bool cmp(const nod &a, const nod &b){
return a.val>b.val;
}
int ans[MAXN];
void dfs(int u){
add(ran[u], 1);
int sum=get_sum(ran[u]);
for(int i=head[u];i;i=nxt[i]){
int v=vv[i];
dfs(v);
}
ans[u]=get_sum(ran[u])-sum;
}
int main() {
scanf("%d", &n);
for(int i=1;i<=n;++i) scanf("%d", &cow[i].val),cow[i].ord=i;
sort(cow+1, cow+1+n, cmp);
for(int i=1;i<=n;++i) ran[cow[i].ord]=i;
for(int i=2;i<=n;++i){
int t;scanf("%d", &t);
add_edge(t, i);
}
dfs(1);
for(int i=1;i<=n;++i) printf("%d\n", ans[i]);
return 0;
}
[USACO17JAN] 晋升者计数 dfs序+树状数组的更多相关文章
- POJ 3321:Apple Tree + HDU 3887:Counting Offspring(DFS序+树状数组)
http://poj.org/problem?id=3321 http://acm.hdu.edu.cn/showproblem.php?pid=3887 POJ 3321: 题意:给出一棵根节点为1 ...
- HDU 3887:Counting Offspring(DFS序+树状数组)
http://acm.hdu.edu.cn/showproblem.php?pid=3887 题意:给出一个有根树,问对于每一个节点它的子树中有多少个节点的值是小于它的. 思路:这题和那道苹果树是一样 ...
- HDU 5293 Tree chain problem 树形dp+dfs序+树状数组+LCA
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 题意: 给你一些链,每条链都有自己的价值,求不相交不重合的链能够组成的最大价值. 题解: 树形 ...
- Codeforces Round #225 (Div. 1) C. Propagating tree dfs序+树状数组
C. Propagating tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/383/p ...
- BZOJ 2434: [Noi2011]阿狸的打字机( AC自动机 + DFS序 + 树状数组 )
一个串a在b中出现, 那么a是b的某些前缀的后缀, 所以搞出AC自动机, 按fail反向建树, 然后查询(x, y)就是y的子树中有多少是x的前缀. 离线, 对AC自动机DFS一遍, 用dfs序+树状 ...
- 【bzoj3881】[Coci2015]Divljak AC自动机+树链的并+DFS序+树状数组
题目描述 Alice有n个字符串S_1,S_2...S_n,Bob有一个字符串集合T,一开始集合是空的. 接下来会发生q个操作,操作有两种形式: “1 P”,Bob往自己的集合里添加了一个字符串P. ...
- [BZOJ1103][POI2007]大都市meg dfs序+树状数组
Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次编号为1..n ...
- 2018.10.20 NOIP模拟 巧克力(trie树+dfs序+树状数组)
传送门 好题啊. 考虑前面的32分,直接维护后缀trietrietrie树就行了. 如果#号不在字符串首? 只需要维护第一个#前面的字符串和最后一个#后面的字符串. 分开用两棵trie树并且维护第一棵 ...
- HDU 5293 Annoying problem 树形dp dfs序 树状数组 lca
Annoying problem 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 Description Coco has a tree, w ...
随机推荐
- asp.net core-7.在Core Mvc中使用Options
1,添加asp.net core mvc应用程序 2,添加Controllers控制器文件夹,Views视图文件夹 然后在Startup类中ConfigureServices方法中注册一下servic ...
- uboot中打开 debug调试信息的方法
在uboot目录下include/common.h中, 原理:只需要让 _DEBUG 的值为 1即可. 最简单的做法就是在下图第一行之前添加 #define DEBUG
- spring-cloud搭建
1.myApplicaion 启动服务类上层必须有一层包 2.报错 com.sun.jersey.api.client.ClientHandlerException: java.net.Connect ...
- 接口请求 URL转码
什么是URL转码 不管是以何种方式传递url时,如果要传递的url中包含特殊字符,如想要传递一个+,但是这个+会被url会被编码成空格,想要传递&,被url处理成分隔符. 尤其是当传递的url ...
- Html5+Mui前端框架,开发记录(二):提交不了数据?
1.Mui 请求Webapi接口,返回所需要的数据(get,post) mui.ajax({ url: getAddress() + '/api/Qiliu/get?jsoncallback=?', ...
- C# XML 序列化帮助类
/// <summary> /// Xml helper class /// </summary> public static class XmlHelper { #regio ...
- MyEclipse j2ee工程 WEB-INF 目录内容显示
公司项目,使用的ant打包技术,,,蛋疼刚开始以为每次改个java代码都要ant 构建编译一把3-4分钟,很没有效率,, 然后实际使用中发下,可以用 auto building 和tomcat 的re ...
- SAP应用真的不性感么
这是一个问题. 上图的One Order是楼下一个部门领导让我给他的团队做的一个古老框架的session. 这个框架诞生于2000年,采用纯面向过程的思路开发.因为上世纪90年代ABAP开始引入对面向 ...
- eclipse开发scrapy爬虫工程,附爬虫临门级教程
写在前面 自学爬虫入门之后感觉应该将自己的学习过程整理一下,也为了留个纪念吧. scrapy环境的配置还请自行百度,其实也不难(仅针对windows系统,centos配置了两天,直到现在都没整明白) ...
- 用arduino的uno开发板为nano板子烧写bootloader
这篇文章,是为了记录下某宝上淘到的一个没有bootloader的nano开发板的历程(比较坑),自己搜索资料而记录的. 如果没有bootloader,板子就不能接收上传的程序,什么也干不了. 烧写bo ...