zoukankan      html  css  js  c++  java
  • BZOJ 3784 树上的路径(点分治+ST+堆+贪心)待处理

    Description

    给定一个N个结点的树,结点用正整数1..N编号。每条边有一个正整数权值。用d(a,b)表示从结点a到结点b路边上经过边的权值。其中要求a<b.将这n*(n-1)/2个距离从大到小排序,输出前M个距离值。
     

    Input

    第一行两个正整数N,M
    下面N-1行,每行三个正整数a,b,c(a,b<=N,C<=10000)。表示结点a到结点b有一条权值为c的边。
     

    Output

    共M行,如题所述.
     

    Sample Input

    5 10 
    1 2 1 
    1 3 2 
    2 4 3 
    2 5 4

    Sample Output












    Hint

    N<=50000,M<=Min(300000,n*(n-1) /2 )

    题解:点分治,将在分治过程中点到根的距离放在一个数组中,若将当前子树内的点作为路径的一个端点,另一个端点可以落在一个点分治序列的区间内(之前扫过的子树),长度最大n*logn, 用四元组表示

    start,ends,l, r,用ST表维护对应的最优解,查询每一个节点作为起点在对应的l,r区间的最优解,并放入堆中。每次取出最大的元素,并把的它对应的次优解放进去。有点难敲,先放着。。。

  • 相关阅读:
    Linux系统root密码修改
    网络通信
    运维平台cmdb开发-day1
    questions information
    Django Rest Framework
    Django-CBV和跨域请求伪造
    Flask学习
    会议室预定终章
    python的可变数据类型和不可变类型
    模拟admin组件自己开发stark组件之搜索和批量操作
  • 原文地址:https://www.cnblogs.com/Yokel062/p/11752653.html
Copyright © 2011-2022 走看看