题目传送门
没想到啥简单的方法,就写了个DFS序+主席树
具体看代码:

#include<bits/stdc++.h>
using namespace std;const int maxn=100000+100;
struct Edge{int to,next;
}edge[maxn<<1];
int head[maxn],tot;
int Id[maxn],Rev[maxn],Max[maxn],id;
struct Tree{int sum;int l,r;
}tree[maxn*20];
int root[maxn],num;
int key;void DFS(int u,int fa){Id[u]= ++id;Max[u]=id;Rev[id]=u;for(int i=head[u];i!=-1;i=edge[i].next){Edge e=edge[i];int v=e.to;if(v==fa) continue;DFS(v,u);Max[u]=max(Max[u],Max[v]);}
}void build(int &x,int l,int r){x= ++num;tree[x].sum=0;if(l==r) return ;int mid=(l+r)>>1;build(tree[x].l,l,mid);build(tree[x].r,mid+1,r);
}inline void update(int &x,int old,int l,int r,int ind){x= ++num;tree[x]=tree[old];tree[x].sum=tree[old].sum+1;if(l==r) return ;int mid=(l+r)>>1;if(mid>=ind) update(tree[x].l,tree[old].l,l,mid,ind);else update(tree[x].r,tree[old].r,mid+1,r,ind);
}inline void query(int ltree,int rtree,int l,int r,int v){if(l==r) return ;int cnt=tree[tree[rtree].l].sum-tree[tree[ltree].l].sum;int mid=(l+r)>>1;if(mid>=v) query(tree[ltree].l,tree[rtree].l,l,mid,v);else key+=cnt,query(tree[ltree].r,tree[rtree].r,mid+1,r,v);
}int main(){int n,rt;scanf("%d%d",&n,&rt);for(int i=1;i<=n;i++) head[i]=-1;tot=0;for(int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);edge[tot].to=v;edge[tot].next=head[u];head[u]=tot++;edge[tot].to=u;edge[tot].next=head[v];head[v]=tot++;}DFS(rt,-1);num=0;build(root[0],1,n);for(int i=1;i<=n;i++) update(root[i],root[i-1],1,n,Rev[i]);for(int i=1;i<=n;i++){key=0;query(root[Id[i]-1],root[Max[i]],1,n,i);printf("%d%c",key,i==n?'\n':' ');}
}

计蒜客 - 青出于蓝胜于蓝相关推荐

  1. 计蒜客-青出于蓝胜于蓝 dfs+树状数组

    题目描述: 武当派一共有 n人,门派内 n 人按照武功高低进行排名,武功最高的人排名第 1,次高的人排名第 2,... 武功最低的人排名第 n.现在我们用武功的排名来给每个人标号,除了祖师爷,每个人都 ...

  2. 计蒜客 挑战难题 爬楼梯

    计蒜客 挑战难题 爬楼梯 假设你现在正在爬楼梯,楼梯有n级.每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部? 格式: 第一行输入一个数n(n<=50),代表楼梯的级数. 接下来一行输 ...

  3. 无脑博士的试管们java_计蒜客 无脑博士和他的试管们

    标签: 无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直 ...

  4. 最短路(遍历边)计蒜客—DD坐地铁

    题目: C 城有 n 个站点, m 条双向地铁,每条地铁有一个 companyicompany_icompanyi​表示它的公司,如果连续乘坐同一家公司的地铁只要花 1元钱就好.DD现在想出门找萨摩耶 ...

  5. K - Triangle 计蒜客 - 42405

    K - Triangle 计蒜客 - 42405 题意: 给你一个三角形的三点,再给你三角形边上一个点,让你求另一个点(也要在三角形上),使得平分三角形的面积 题解: 计算几何 三角形的三边ab,ac ...

  6. H - Prince and Princess 计蒜客 - 42402

    H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主,有三种人,第一种是说真话的人(至少为1,因为公主是说真话的人),第二种人是只会说假话的,第三种是胡说八 ...

  7. C - Digital Path 计蒜客 - 42397 05-29

    C - Digital Path 计蒜客 - 42397 题意: 题意就是给出一个n ∗ m的数字矩阵每个矩阵元素之间只能上下左右走,而且下一个位置必须比当前位置的数字大1,入口和出口必须数边缘元素, ...

  8. 计蒜客可以做计算机编程吗,如果你的编程能力不足以支撑你成为工程师的野心,不妨到计蒜客上学学看...

    在人才招聘领域存在这样一个怪圈,高校每年都说是最难就业年.人才过剩,而对于企业HR来说永远都招不到称心如意的人才.这个怪圈在"计蒜客"创始人俞昊然看来,主要是因为当今高校的教学资源 ...

  9. 计蒜客 - T1012 A*B问题

    计蒜客 - T1012 A*B问题 相信你已经学会 A+B 问题了,那么问题又来了- 输入两个正整数 A 和 B ,求 A×B. 输入格式 一行,包含两个正整数 A 和 B,中间用单个空格隔开. 1≤ ...

  10. 计蒜客网站 ACM-ICPC亚洲区赛题

    The Preliminary Contest for ICPC China Nanchang National Invitational(2019) ACM-ICPC Jiaozuo Onsite ...

最新文章

  1. 从零到一:带你认识深度学习!
  2. QQ 邮箱的换肤 bug
  3. python while循环语句-python循环语句讲解(一):while循环
  4. HTML5 Canvas 旋转
  5. leetcode 399. Evaluate Division | 399. 除法求值(图的邻接表,DFS)
  6. tomcat启动后命令行日志中文乱码
  7. IntelliJ IDEA 2020 如何同时启动多个服务
  8. vbox里面的Ubuntu虚拟机与主机win7之间设置共享文件夹
  9. ueditor插入自定义内容和样式
  10. 整理一下CCF推荐期刊会议(A类)
  11. 科立捷默认频率_TETRA对讲机简介
  12. Alictf2014 Writeup
  13. 基于支付场景下的微服务改造与性能优化
  14. oracle有rtf函数,Delphi中对Oracle存取RTF文档(作者:苏涌)
  15. java rgb565转rgb888_RGB565 与 RGB888的相互转换 | 学步园
  16. R语言报错:Error in data[[rowvar]] : attempt to select less than one element in get1index
  17. linux基础-自查
  18. Android音视频点/直播模块开发
  19. SV绿皮书笔记(九)暂时完结
  20. Oracle 递归查询SQL

热门文章

  1. 使用gensim训练维基百科
  2. 利用ADO连接数据库时,Rs.recordcount总是返回-1,解决办法
  3. html 透明玻璃效果,PS教程:制作透明玻璃效果(一)
  4. python爬虫豆瓣电影评价_python爬虫入门—统计豆瓣电影评论词频
  5. 炉石传说的代码是Java吗,hearthstone: 炉石传说,JAVA模拟器(HearthStone Simulator for Java)...
  6. 西餐餐饮文化、简单鸡尾酒调制~~DIY的力量无穷
  7. win10的ie保存html文件夹,win10系统IE缓存文件夹在哪里,详细教您IE缓存文件在哪里...
  8. 暗影精灵5触摸板双指手势失效问题
  9. 2019年最新Java学习路线图
  10. 智能手环功能模块设计_智能手环毕业设计