zoukankan      html  css  js  c++  java
  • 雨天的尾巴(bzoj3307)(线段树合并+树上差分)

    (N)个点,形成一个树状结构。有(M)次发放,每次选择两个点(x,y)
    对于(x)(y)的路径上(含(x,y))每个点发一袋(Z)类型的物品。完成
    所有发放后,每个点存放最多的是哪种物品。

    Input

    第一行数字(N)(M)
    接下来(N-1)行,每行两个数字(a,b),表示(a)(b)间有一条边
    再接下来(M)行,每行三个数字(x,y,z).如题

    Output

    输出有(N)
    每i行的数字表示第(i)个点存放最多的物品是哪一种,如果有
    多种物品的数量一样,输出编号最小的。如果某个点没有物品
    则输出0

    Sample Input

    20 50
    8 6
    10 6
    18 6
    20 10
    7 20
    2 18
    19 8
    1 6
    14 20
    16 10
    13 19
    3 14
    17 18
    11 19
    4 11
    15 14
    5 18
    9 10
    12 15
    11 14 87
    12 1 87
    14 3 84
    17 2 36
    6 5 93
    17 6 87
    10 14 93
    5 16 78
    6 15 93
    15 5 16
    11 8 50
    17 19 50
    5 4 87
    15 20 78
    1 17 50
    20 13 87
    7 15 22
    16 11 94
    19 8 87
    18 3 93
    13 13 87
    2 1 87
    2 6 22
    5 20 84
    10 12 93
    18 12 87
    16 10 93
    8 17 93
    14 7 36
    7 4 22
    5 9 87
    13 10 16
    20 11 50
    9 16 84
    10 17 16
    19 6 87
    12 2 36
    20 9 94
    9 2 84
    14 1 94
    5 5 94
    8 17 16
    12 8 36
    20 17 78
    12 18 50
    16 8 94
    2 19 36
    10 18 36
    14 19 50
    4 12 50
    

    Sample Output

    87
    36
    84
    22
    87
    87
    22
    50
    84
    87
    50
    36
    87
    93
    36
    94
    16
    87
    50
    50
    

    (1<=N,M<=100000)

    (1<=a,b,x,y<=N)

    (1<=z<=1e9)

    题意

    中文题面,不解释

    题解:

    先用树上差分的思想,确定哪个点上要加点,哪个点上要减点。然后用线段树合并,边(dfs)边合并更新,然后最后查询每个点对应的根上的值就行了。

  • 相关阅读:
    小三角 + 右箭头【纯css】
    小程序自定义弹窗【解决点透问题】
    分页存储过程
    SQL如何用一条语句批量修改表中不同数据
    Dapper批量更新
    vue中 $event 的用法--获取当前父元素,子元素,兄弟元素
    T-sql语句查询执行顺序
    Lucene入门
    Spring Boot入门
    SSM-Spring一些知识点
  • 原文地址:https://www.cnblogs.com/zhenglier/p/10099039.html
Copyright © 2011-2022 走看看