题意:

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. tp5 引入 没有命名空间的类库的方法(以微信支付SDK为例)

    use think\Loader; Loader::import('Wxpay.WxPay',EXTEND_PATH,'.Api.php'); 注意扩展名的点"."不能省略 使用之 ...

  2. Windows 10 64位操作系统 下安装、启动测试python pycharm

    一.下载python3.7.7安装包 1:详细下载安装版本可见官网:https://www.python.org/downloads/release/python-373/ 2:百度盘分享连接:htt ...

  3. win10系统移动热点使用技巧

    win10系统是自动移动热点功能,在平时测试的时候,有时需要进行手机抓包,需要手机和电脑处于同一网络当中,这时可以开启热点使用. 如何开启移动热点? 直接搜索"移动热点" 但是如果 ...

  4. phpmyadmin 设置密码

    例如 xampp 安装路径为 /opt/lampp/, copy 一份默认的配置 cp /opt/lampp/phpmyadmin/libraries/config.default.php /opt/ ...

  5. requests接口自动化-数据库参数化

    数据库参数化的场景 部分接口,参数其他方式获取不到,可以去数据库去获取,如手机验证码 安装pymysql 配置文件 def sql_conf(): # 定义数据库的配置 host='127.0.0.1 ...

  6. Python项目生成requirements.txt文件之pipreqs的使用

    生成requirements.txt时使用pip freeze > requirements.txt会将环境下所有的安装包都进行生成,再进行安装的时候会全部安装很多没有的包.耗时耗力其实是不可取 ...

  7. 关于我刚开始学习c语言的这档事

    关于我刚开始学习C语言的这档事 就在9月20日下午,记得王老师曾提及三类人,一类专注于自己内心的感受:一类人专注于探索与创造:还有一类专注于效率的最大化.思绪不禁回想到11号至今的学习过程-- 我的学 ...

  8. P5488-差分与前缀和【NTT,生成函数】

    正题 题目链接:https://www.luogu.com.cn/problem/P5488 题目大意 求一个长度为$n$的序列的$k$阶差分/前缀和. 解题思路 先考虑前缀和怎么做 搞出来生成函数就 ...

  9. k8s负载资源StatefulSet工作解析

    在k8s中工作负载资源StatefulSet用于管理有状态应用. 什么是无状态? 组成一个应用的pod是对等的,它们之前没有关联和依赖关系,不依赖外部存储. 即我们上篇小作文中deployment创建 ...

  10. SVN服务器的环境搭建(图文并茂)

    SVN服务器的搭建与使用 本章读完,就可以创建代码版本库,传送门 https://www.cnblogs.com/zzpython/p/13348009.html TortoiseSVN 是 Subv ...