题意:

N个点形成一棵树。给出根结点P还有树结构的信息。

输出每个点的F[i]。F[i]:以i为根的所有子结点中编号比i小的数的个数。

0<n<=10^5

思路:

方法一:直接DFS,进入结点x时记录一下比x小的数的个数。出来x时记录一下比x小的数的个数。相减就是F[x]。结合树状数组。

方法二:写下DFS序。对DFS序列建线段树。然后从小到大对结点进行插入。用线段树统计。

代码:(方法一)

int const N=1e5+5;

int n,p;
vector<int> G[N];
int C[N];
int ans[N];
stack<int> S;
bool vis[N]; void Add(int x){
for(int i=x;i<=n;i+=lowbit(i)){
C[i]++;
}
}
int query(int x){
int ret=0;
for(int i=x;i>0;i-=lowbit(i)){
ret+=C[i];
}
return ret;
} void dfs(int u){
while(!S.empty()){
S.pop();
}
mem(vis,false);
S.push(u);
vis[u]=true;
while(!S.empty()){
int now=S.top();
int L=G[now].size();
bool flag=false;
rep(i,0,L-1){
if(vis[G[now][i]]==false){
vis[G[now][i]]=true;
flag=true;
int t=G[now][i];
ans[t]=query(t-1);
S.push(G[now][i]);
break;
}
}
if(!flag){
ans[now]=query(now-1)-ans[now];
Add(now);
S.pop();
}
}
} int main(){ while(scanf("%d%d",&n,&p)!=EOF,n||p){ rep(i,1,n) G[i].clear();
mem(C,0);
mem(ans,0); rep(i,1,n-1){
int a,b;
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
dfs(p);
rep(i,1,n-1) printf("%d ",ans[i]); cout<<ans[n]<<endl;
} return 0;
}

hdu 3887 Counting Offspring(DFS序【非递归】+树状数组)的更多相关文章

  1. hdu 3887 Counting Offspring dfs序+树状数组

    Counting Offspring Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  2. 洛谷P2414 阿狸的打字机【AC自动机】【fail树】【dfs序】【树状数组】

    居然真的遇上了这种蔡队题.瑟瑟发抖. 题目背景 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机. 题目描述 打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母.经阿 ...

  3. 【dfs序+AC自动机+树状数组】BZOJ2434-[Noi2011]阿狸的打字机

    [题目大意] 输入一个字符串,其中:(1)a..z:在字符串末尾添加当前字符(2)P:输出当前字符串(3)B:从当前字符串末尾删去一个字符. 给出m组查询,输出第i个输出的字符串在第j个输出的字符串内 ...

  4. 【bzoj3488】[ONTAK2010]Highways DFS序+树上倍增+树状数组

    题目描述 一棵n个点的树,给定m条路径,q次询问包含一条路径的给定路径的个数+1 输入 The first line of input contains a single integer N(1< ...

  5. Codeforces 375D Tree and Queries(DFS序+莫队+树状数组)

    题目链接  Tree and Queries 题目大意  给出一棵树和每个节点的颜色.每次询问$vj, kj$ 你需要回答在以$vj$为根的子树中满足条件的的颜色数目, 条件:具有该颜色的节点数量至少 ...

  6. 【手动开栈】【dfs序】【树状数组】【Tarjan】bzoj2819 Nim

    考虑树状数组区间修改(只对其子树的答案有影响)点查询,每个点记录的是它到根路径上的权值异或和. 答案时query(L)^query(R)^a[lca]. 这种方法在支持区间加法.减法的树上询问的时候可 ...

  7. 【dfs序】【树状数组】bzoj1103 [POI2007]大都市meg

    预处理出每个点到根节点的土路数,插到一个树状数组里,然后每次修改只会对子树中的节点造成影响,于是相当于区间修改.点查询了. #include<cstdio> using namespace ...

  8. HDU 6203 ping ping ping [LCA,贪心,DFS序,BIT(树状数组)]

    题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=6203] 题意 :给出一棵树,如果(a,b)路径上有坏点,那么(a,b)之间不联通,给出一些不联通的点 ...

  9. HDU 3887 Counting Offspring(DFS序+树状数组)

    Counting Offspring Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

随机推荐

  1. 通过Wireshark抓包分析谈谈DNS域名解析的那些事儿

    文/朱季谦 本文主要想通过动手实际分析一下是如何通过DNS服务器来解析域名获取对应IP地址的,毕竟,纸上得来终觉浅,绝知此事要躬行. 域名与IP地址 当在浏览器上敲下"www.baidu.c ...

  2. Android——菜单(Menu)

    菜单的运用在Android中很常见,今天就两节体育课,闲下来也想认真的学一学,正好项目中也会有应用.我是跟着菜鸟教程进行学习的,我相应的粘了一些我自己认为比较重要的,以供方便记录学习. 本章给大家带来 ...

  3. PHP的内置WEB服务器

    在很多时候,我们需要简单的运行一个小 demo 来验证一些代码或者轮子是否可用,是否可以运行起来,但是去配 nginx 或者 apache 都很麻烦,其实,PHP CLI 已经提供了一个简单的测试服务 ...

  4. 织梦arclist文章标题字数太短

    解决dedecms UTF-8首页文章标题显示字数太短的办法原因分析:因为UTF-8编码1个中文汉字占用的是3个字节,GBK占用的是2个字节,所以,原先$titlelen = AttDef($titl ...

  5. Groovy系列(1)- Groovy简述

    Groovy简述 前言 由于性能测试的JSR223 Sampler取样器需要用到 Groovy 语言,这两天对其进行了粗略的学习,本文是对学习做的一个简单总结,主要内容参考于官方文档(Groovy 的 ...

  6. PKI及SSL协议分析PKI及SSL协议分析

    任务一:搭建CA服务器 本任务初步了解CA服务器的原理和配置过程.操作都在CA服务器上. 1.远程桌面方式登录到CA服务器,在CMD下查看本机IP地址: 2.安装证书服务 依次点击:"开始& ...

  7. 关于ModuleNotFoundError: No module named 'xxx' 模块导入失败问题

    我在执行数据库迁移命令的时候pycharm报错,提示ModuleNotFoundError: No module named 'ckeditor',但是我确实是导进来了,而且这个包也从settings ...

  8. 鸿蒙内核源码分析(寄存器篇) | 小强乃宇宙最忙存储器 | 百篇博客分析OpenHarmony源码 | v38.02

    百篇博客系列篇.本篇为: v38.xx 鸿蒙内核源码分析(寄存器篇) | 小强乃宇宙最忙存储器 | 51.c.h .o 硬件架构相关篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU在哪 ...

  9. P1912-[NOI2009]诗人小G【四边形不等式,单调队列】

    正题 题目链接:https://www.luogu.com.cn/problem/P1912 题目大意 给出\(n\)个字符串,把这些字符串依次用空格(算一个长度)连接分成若干段,若一段长度为\(x\ ...

  10. Appium+Python自动化环境搭建-1

    前言 appium可以说是做app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本语言也是支持java和Python. 小编擅长Python,所以接下来的教程是appium+p ...