题目

  • 题目大意 :给出一棵树,节点有点权,求每个节点的祖先中点权小于该节点的结点的个数 。

  • 思路如下 :

    • 从根节点开始,对树进行深度优先遍历。

    • 当进行到节点 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的更多相关文章

  1. 洛谷P2982 [USACO10FEB]慢下来Slowing down [2017年四月计划 树状数组01]

    P2982 [USACO10FEB]慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) c ...

  2. 洛谷P2982 [USACO10FEB]慢下来Slowing down(线段树 DFS序 区间增减 单点查询)

    To 洛谷.2982 慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) cows con ...

  3. 洛谷 P2982 [USACO10FEB]慢下来Slowing down

    题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) cows conveniently numbered 1..N mov ...

  4. 洛谷——P2983 [USACO10FEB]购买巧克力Chocolate Buying

    P2983 [USACO10FEB]购买巧克力Chocolate Buying 题目描述 Bessie and the herd love chocolate so Farmer John is bu ...

  5. 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying 题解

    P2983 [USACO10FEB]购买巧克力Chocolate Buying 题目描述 Bessie and the herd love chocolate so Farmer John is bu ...

  6. 洛谷P2983 [USACO10FEB]购买巧克力Chocolate Buying

    题目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Chocolate Sto ...

  7. 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying

    购买巧克力Chocolate Buying 乍一看以为是背包,然后交了一个感觉没错的背包上去. #include <iostream> #include <cstdio> #i ...

  8. 洛谷 P2984 [USACO10FEB]给巧克力Chocolate Giving

    题目描述 Farmer John is distributing chocolates at the barn for Valentine's day, and B (1 <= B <= ...

  9. 洛谷—— P2983 [USACO10FEB]购买巧克力Chocolate Buying

    https://www.luogu.org/problem/show?pid=2983 题目描述 Bessie and the herd love chocolate so Farmer John i ...

随机推荐

  1. SQL多表联合查询(交叉连接,内连接,外连接)

    连接查询:     交叉连接:   交叉连接返回的结果是被连接的两个表中所有数据行的笛卡尔积,也就是返回第一个表中符合查询条件的数据航数乘以第二个表中符合,查询条件的数据行数,例如department ...

  2. Java 控制类的引用类型,合理使用内存

    Java提供了 java.lang.ref包,该包下的类均与垃圾回收机制相关 先介绍Java对象的集中引用类型 1.强引用 强引用是最常见的,创建对象就是强引用,如 String a = new St ...

  3. JavaScript开发工具简明历史

    译者按: JavaScript开发要用到的工具越来越多,越来越复杂,为什么呢?你真的弄明白了吗? 原文: Modern JavaScript Explained For Dinosaurs 为了保证可 ...

  4. Java并发编程学习:线程安全与锁优化

    本文参考<深入理解java虚拟机第二版> 一.什么是线程安全? 这里我借<Java Concurrency In Practice>里面的话:当多个线程访问一个对象,如果不考虑 ...

  5. C#Thread的方法、Start()、Sleep(int)、Abort()、Suspend()、Resume()

    Thread类有几个至关重要的方法 Start():启动线程: Sleep(int):静态方法,暂停当前线程指定的毫秒数: Abort():通常使用该方法来终止一个线程: Suspend():该方法并 ...

  6. es6 语法 (字符串扩展)

    { console.log('a',`\u0061`); //a,a console.log('s',`\u20BB7`); //s ₻7 console.log('s',`\u{20BB7}`) / ...

  7. Python 一键上传下载&一键提交文件到SVN入基线工具

    一键上传下载&一键提交文件到SVN入基线工具   by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用说明 1   注: 根据我司项目规则订制的一套工具,集成以下功能,源码 ...

  8. Android沉浸式状态栏的简单实现

    随着卡片式设计在Android系统的上越来越流行,比如现在早已经烂大街的沉浸式状态栏,几乎所有的主流的APP都支持沉浸式状态栏,如QQ.UC浏览器等等.所以觉得有必要学习一下,找了点资料,总结了一下, ...

  9. [转] vi/vim命令模式和编辑模式各种操作

    摘要:vi 编辑器是最常用的文档创建和编辑工具,初学者应该学会简单应用vi ,学会在vi 中做简单的修改.删除.插入.搜索及替换作业:如果您是新手,不妨看看本文,或许这篇文档能让您在最短的时间内学会v ...

  10. springmvc复习笔记----springmvc姓名年龄例子:RequestParam 试水

    继续 继上节http://www.cnblogs.com/tk55/p/6652394.html 重要部分颜色突出 结构 包 web.xml 乱码处理方面设置 <url-pattern>* ...