BZOJ4317: Atm的树+2051+2117

https://lydsy.com/JudgeOnline/problem.php?id=4317

分析:

  • 二分答案之后就变成震波那道题了。
  • 冷静一下可以发现,这题没有修改,直接维护一个有序表每次二分就完事了。

代码:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. #define N 15050
  6. int head[N],to[N<<1],nxt[N<<1],val[N<<1],cnt,n,K;
  7. int siz[N],fk[N],root;
  8. int fa[N][15],dep[N],dis[N][15],used[N],tot;
  9. int bg[N][2],ed[N][2],pp;
  10. int a[N*30];
  11. inline void add(int u,int v,int w) {
  12. to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt; val[cnt]=w;
  13. }
  14. void gr(int x,int y) {
  15. int i;
  16. siz[x]=1; fk[x]=0;
  17. for(i=head[x];i;i=nxt[i]) if(to[i]!=y&&!used[to[i]]) {
  18. gr(to[i],x); siz[x]+=siz[to[i]];
  19. fk[x]=max(fk[x],siz[to[i]]);
  20. }
  21. fk[x]=max(fk[x],tot-siz[x]);
  22. if(fk[x]<fk[root]) root=x;
  23. }
  24. void gd(int x,int y,int rt,int d) {
  25. int i;
  26. a[++pp]=d; a[pp+tot]=dis[x][dep[x]];
  27. fa[x][++dep[x]]=rt; dis[x][dep[x]]=d;
  28. for(i=head[x];i;i=nxt[i]) if(to[i]!=y&&!used[to[i]]) {
  29. gd(to[i],x,rt,d+val[i]);
  30. }
  31. }
  32. void solve(int x) {
  33. used[x]=1;
  34. int i,all=tot;
  35. bg[x][0]=pp+1, bg[x][1]=pp+tot+1, ed[x][0]=pp+tot, ed[x][1]=pp+tot+tot;
  36. gd(x,0,x,0);
  37. sort(a+bg[x][0],a+ed[x][0]+1);
  38. sort(a+bg[x][1],a+ed[x][1]+1);
  39. pp+=tot;
  40. for(i=head[x];i;i=nxt[i]) if(!used[to[i]]) {
  41. root=0;
  42. tot=siz[to[i]]; if(tot>siz[x]) tot=all-siz[x];
  43. gr(to[i],x); solve(root);
  44. }
  45. }
  46. int find(int x,int o,int k) {
  47. if(!x) return 0;
  48. int l=bg[x][o],r=ed[x][o]+1;
  49. while(l<r) {
  50. int mid=(l+r)>>1;
  51. if(a[mid]>k) r=mid;
  52. else l=mid+1;
  53. }
  54. return l-bg[x][o];
  55. }
  56. int query(int x,int k) {
  57. int i,re=0;
  58. for(i=dep[x];i;i--) {
  59. if(k>=dis[x][i]) {
  60. re+=find(fa[x][i],0,k-dis[x][i]);
  61. re-=find(fa[x][i+1],1,k-dis[x][i]);
  62. }
  63. }
  64. return re;
  65. }
  66. int main() {
  67. scanf("%d%d",&n,&K); K++;
  68. int i,x,y,z;
  69. for(i=1;i<n;i++) {
  70. scanf("%d%d%d",&x,&y,&z); add(x,y,z); add(y,x,z);
  71. }
  72. fk[0]=1<<30; tot=n; gr(1,0); solve(root);
  73. for(i=1;i<=n;i++) {
  74. int l=0,r=n*10+1;
  75. while(l<r) {
  76. int mid=(l+r)>>1;
  77. int tmp=query(i,mid);
  78. if(tmp>=K) r=mid;
  79. else l=mid+1;
  80. }
  81. printf("%d\n",l);
  82. }
  83. }

BZOJ4317: Atm的树+2051+2117的更多相关文章

  1. [BZOJ2051]A Problem For Fun/[BZOJ2117]Crash的旅游计划/[BZOJ4317]Atm的树

    [BZOJ2051]A Problem For Fun/[BZOJ2117]Crash的旅游计划/[BZOJ4317]Atm的树 题目大意: 给出一个\(n(n\le10^5)\)个结点的树,每条边有 ...

  2. BZOJ4317: Atm的树

    Description Atm有一段时间在虐qtree的题目,于是,他满脑子都是tree,tree,tree…… 于是,一天晚上他梦到自己被关在了一个有根树中,每条路径都有边权,一个神秘的声音告诉他, ...

  3. 【BZOJ4317】Atm的树 动态树分治+二分+线段树

    [BZOJ4317]Atm的树 Description Atm有一段时间在虐qtree的题目,于是,他满脑子都是tree,tree,tree…… 于是,一天晚上他梦到自己被关在了一个有根树中,每条路径 ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. MVC图片上传详解 IIS (安装SSL证书后) 实现 HTTP 自动跳转到 HTTPS C#中Enum用法小结 表达式目录树 “村长”教你测试用例 引用provinces.js的三级联动

    MVC图片上传详解   MVC图片上传--控制器方法 新建一个控制器命名为File,定义一个Img方法 [HttpPost]public ActionResult Img(HttpPostedFile ...

  6. BZOJ 2157: 旅游( 树链剖分 )

    树链剖分.. 样例太大了根本没法调...顺便把数据生成器放上来 -------------------------------------------------------------------- ...

  7. 我眼中的Linux设备树(二 节点)

    二 节点(node)的表示首先说节点的表示方法,除了根节点只用一个斜杠"/"表示外,其他节点的表示形式如"node-name@unit-address".@前边 ...

  8. BZOJ4317Atm的树&BZOJ2051A Problem For Fun&BZOJ2117[2010国家集训队]Crash的旅游计划——二分答案+动态点分治(点分树套线段树/点分树+vector)

    题目描述 Atm有一段时间在虐qtree的题目,于是,他满脑子都是tree,tree,tree…… 于是,一天晚上他梦到自己被关在了一个有根树中,每条路径都有边权,一个神秘的声音告诉他,每个点到其他的 ...

  9. Linux设备树(二 节点)

    二 节点(node)的表示 首先说节点的表示方法,除了根节点只用一个斜杠“/”表示外,其他节点的表示形式如“node-name@unit-address”.@前边是节点名字,后边是节点地址.节点名字的 ...

随机推荐

  1. Linux下SVN安装与权限管理

    cat /etc/redhat-release //查看系统版本号 CentOS release 7.1 (Final) 这里我们採用yum源安装方式: 1.安装svn yum install sub ...

  2. stm32DMA通道 ADC通道

    DMA: 1.使用DAC的时候.将转化后得到的模拟信号通过IO口输出的时候.为什么还将IO口配置能输入模式 PS:stm32手冊上定义PA4和PA5分别和DAC1通道和DAC2通道相连  : DMA1 ...

  3. LCD驱动程序(二)

    上节我们主要是对fb_info结构体的配置,对fb_info结构体的配置主要分为一下步骤: static int lcd_init(void){ /* 1. 分配一个fb_info */ s3c_lc ...

  4. 自定义tabpageindicator,可以自定义tab是三角形还是矩形,但是tab不具有滑动的功能

    我是不会滴,但是看了一些大神写的,我修改了一下,大家可以参照参照 一,自定义Mytabpageindicator,直接贴代码了,具体的在代码中有注释 package com.wangy.mytabpa ...

  5. 不怕慢 就怕站 不怕单线程 不怕 裸露ip

    import sys import os import requests import threading from time import sleep from bs4 import Beautif ...

  6. 我的Android进阶之旅------>Android颜色值(RGB)所支持的四种常见形式

    Android中颜色值是通过红(Red).绿(Green).蓝(Blue)三原色,以及一个透明度(Alpha)值来表示的,颜色值总是以井号(#)开头,接下来就是Alpha-Red-Green-Blue ...

  7. spark的若干问题

    问题1:SPARK与HADOOP之间的关系? spark是一种高效处理hadoop分布式数据的处理引擎.借助hadoop的yarn框架,spark就可以运行在hadoop集群中.同时spark也可以处 ...

  8. (转)基于libRTMP的流媒体直播之 AAC、H264 推送

    参考: 1,基于libRTMP的流媒体直播之 AAC.H264 推送 http://billhoo.blog.51cto.com/2337751/1557646

  9. 查看django的安装路径

    查看django的安装路径 pip3 show django

  10. HTML哪些是块级元素,哪些是行内元素、

    块级元素:块级大多为结构性标记 <address>...</adderss> <center>...</center>  地址文字 <h1> ...