洛谷P2982 [USACO10FEB]慢下来Slowing down
题目大意 :给出一棵树,节点有点权,求每个节点的祖先中点权小于该节点的结点的个数 。
思路如下 :
从根节点开始,对树进行深度优先遍历。
- 当进行到节点 i 时,有:
$\text{i}$ 的祖先们 $\text{Father[i]}$ 已经被访问过了,但还没有退出。
其他节点或者已经被访问过并退出了,或者还没有被访问。
那么需要一个数据结构,维护那些已经被访问过了,但还没有退出的点权,支持查询小于特定值的元素的数量 。
可以使用树状数组或者线段树。
Code
#include <cstdio>
#include <cstring>
#define re register
#define GC getchar()
#define Clean(X,K) memset(X,K,sizeof(X))
#define Lowbit(X) (X&(-X))
int Qread () {
int X = ; char C = GC ;
while (C > '' || C < '') C = GC ;
while (C >='' && C <='') {
X = X * + C - '' ;
C = GC ;
}
return X ;
}
const int Maxn = ;
int N , P_C[Maxn] , Ans[Maxn] , En = , Head[Maxn] , T[Maxn];
struct Edge {
int From_Where , Goto_Where , Next_Edge ;
};
Edge E[Maxn * ] ;
void Adg (int X , int Y) {
E[++En].From_Where = X ;
E[En].Goto_Where = Y ;
E[En].Next_Edge = Head[X] ;
Head[X] = En ;
}
void Add (int X , int K) {
while (X <= N) {
T[X] += K ;
X += Lowbit(X) ;
}
}
int Ask (int X) {
int Ans = ;
while (X > ) {
Ans += T[X] ;
X -= Lowbit(X) ;
}
return Ans ;
}
void Super_Powerful_DFS (int X , int Lst) {
Ans[P_C[X]] = Ask (P_C[X]) ;
//printf ("%d %d %d\n" , X , P_C[X],Ans[P_C[X]]) ;
Add (P_C[X] , ) ;
for (re int i = Head[X] ; i ; i = E[i].Next_Edge ) {
if (E[i].Goto_Where == Lst) continue ;
Super_Powerful_DFS ( E[i].Goto_Where , X) ;
}
Add (P_C[X] , -) ;
}
int main () {
//freopen ("P2982.in" , "r" , stdin) ;
Clean (Ans , ) , Clean (Head , ) , Clean (T , ) , En = ;
N = Qread () ;
for (re int i = ; i < N ; ++ i) {
int X = Qread () , Y = Qread () ;
Adg (X , Y) , Adg (Y , X) ;
}
for (re int i = ; i <= N; ++ i) {
int X = Qread () ;
P_C[X] = i ;
}
Super_Powerful_DFS ( , -) ;
for (re int i = ; i <= N; ++ i) printf ("%d\n" , Ans[i]) ;
fclose (stdin) ;
fclose (stdout);
return ;
}点击这里学习树状数组
Thanks !
洛谷P2982 [USACO10FEB]慢下来Slowing down的更多相关文章
- 洛谷P2982 [USACO10FEB]慢下来Slowing down [2017年四月计划 树状数组01]
P2982 [USACO10FEB]慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) c ...
- 洛谷P2982 [USACO10FEB]慢下来Slowing down(线段树 DFS序 区间增减 单点查询)
To 洛谷.2982 慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) cows con ...
- 洛谷 P2982 [USACO10FEB]慢下来Slowing down
题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) cows conveniently numbered 1..N mov ...
- 洛谷——P2983 [USACO10FEB]购买巧克力Chocolate Buying
P2983 [USACO10FEB]购买巧克力Chocolate Buying 题目描述 Bessie and the herd love chocolate so Farmer John is bu ...
- 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying 题解
P2983 [USACO10FEB]购买巧克力Chocolate Buying 题目描述 Bessie and the herd love chocolate so Farmer John is bu ...
- 洛谷P2983 [USACO10FEB]购买巧克力Chocolate Buying
题目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Chocolate Sto ...
- 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying
购买巧克力Chocolate Buying 乍一看以为是背包,然后交了一个感觉没错的背包上去. #include <iostream> #include <cstdio> #i ...
- 洛谷 P2984 [USACO10FEB]给巧克力Chocolate Giving
题目描述 Farmer John is distributing chocolates at the barn for Valentine's day, and B (1 <= B <= ...
- 洛谷—— P2983 [USACO10FEB]购买巧克力Chocolate Buying
https://www.luogu.org/problem/show?pid=2983 题目描述 Bessie and the herd love chocolate so Farmer John i ...
随机推荐
- 解决微信开发工具上trace无法检测到设备,一直停留在“正在搜索设备...”或者trace panel,choose device老出现device not found
性能 Trace 工具 微信 Andoid 6.5.10 开始,我们提供了 Trace 导出工具,开发者可以在开发者工具 Trace Panel 中使用该功能. 使用方法 PC 上需要先安装 adb ...
- css 如何让背景图片拉伸填充避免重复显示
如何让背景图片拉伸填充,这个问题听起来似乎很简单.但是很遗憾的告诉大家.不是我们想的那么简单. 比如一个容器(body,div,span)中设定一个背景.这个背景的长宽值在css2.1之前是不能被修改 ...
- js 实现 0-9 随机排序
function randomsort(a, b) {return Math.random()>0.5 ? -1 : 1;//用Math.random()函数生成0~1之间的随机数与0.5比较, ...
- 向后台提交数据:cookie,secure_cookie,
向后台提交数据除了前端url,form表单,Ajax外还可以用cookie,secure_cookie,提交更多信息可以在用cookie基础上用session, cookie,secure_cooki ...
- HTML5为输入框添加语音输入功能
这里介绍的是大家以后要用到的html强大功能,可直接给输入框增加语音功能,下面我们先来看看实现方法. 大家可以看到在输入框右边的麦克风图标,点击麦克风就能够进行语音识别了. 其实很简单,语音识别是ht ...
- 【机器学习基本理论】详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解
[机器学习基本理论]详解最大似然估计(MLE).最大后验概率估计(MAP),以及贝叶斯公式的理解 https://mp.csdn.net/postedit/81664644 最大似然估计(Maximu ...
- C#:如何使方法过时,如何否决方法
在使用.Net Frameworkd进行开发时,经常可以在方法的智能提示ToolTip上面看到一个方法是[否决的],如图: 或者在警告里面: 甚至使用[否决的]方法的时候还会造成编译错误: 上面的这些 ...
- Verilog实现模长等于六十的二进制编码计数器
注释都加上了 由于参考网上的代码,其实现了置数 ,使能等功能,一并加上了 编译结果能通过 百度网盘文件下载:https://pan.baidu.com/s/1IVTD19NRk-s2dKBXtATkA ...
- 任意activity作为启动页
在androidManifest.xml中对应的activity中添加 android:exported=“true”
- [20180808]exists and not exists.txt
[20180808]exists and not exists.txt --//生产系统遇到的一个性能问题,通过例子来说明: 1.环境:SCOTT@test01p> @ ver1 PORT_ST ...