BZOJ4317: Atm的树+2051+2117
BZOJ4317: Atm的树+2051+2117
https://lydsy.com/JudgeOnline/problem.php?id=4317
分析:
- 二分答案之后就变成震波那道题了。
- 冷静一下可以发现,这题没有修改,直接维护一个有序表每次二分就完事了。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 15050
int head[N],to[N<<1],nxt[N<<1],val[N<<1],cnt,n,K;
int siz[N],fk[N],root;
int fa[N][15],dep[N],dis[N][15],used[N],tot;
int bg[N][2],ed[N][2],pp;
int a[N*30];
inline void add(int u,int v,int w) {
to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt; val[cnt]=w;
}
void gr(int x,int y) {
int i;
siz[x]=1; fk[x]=0;
for(i=head[x];i;i=nxt[i]) if(to[i]!=y&&!used[to[i]]) {
gr(to[i],x); siz[x]+=siz[to[i]];
fk[x]=max(fk[x],siz[to[i]]);
}
fk[x]=max(fk[x],tot-siz[x]);
if(fk[x]<fk[root]) root=x;
}
void gd(int x,int y,int rt,int d) {
int i;
a[++pp]=d; a[pp+tot]=dis[x][dep[x]];
fa[x][++dep[x]]=rt; dis[x][dep[x]]=d;
for(i=head[x];i;i=nxt[i]) if(to[i]!=y&&!used[to[i]]) {
gd(to[i],x,rt,d+val[i]);
}
}
void solve(int x) {
used[x]=1;
int i,all=tot;
bg[x][0]=pp+1, bg[x][1]=pp+tot+1, ed[x][0]=pp+tot, ed[x][1]=pp+tot+tot;
gd(x,0,x,0);
sort(a+bg[x][0],a+ed[x][0]+1);
sort(a+bg[x][1],a+ed[x][1]+1);
pp+=tot;
for(i=head[x];i;i=nxt[i]) if(!used[to[i]]) {
root=0;
tot=siz[to[i]]; if(tot>siz[x]) tot=all-siz[x];
gr(to[i],x); solve(root);
}
}
int find(int x,int o,int k) {
if(!x) return 0;
int l=bg[x][o],r=ed[x][o]+1;
while(l<r) {
int mid=(l+r)>>1;
if(a[mid]>k) r=mid;
else l=mid+1;
}
return l-bg[x][o];
}
int query(int x,int k) {
int i,re=0;
for(i=dep[x];i;i--) {
if(k>=dis[x][i]) {
re+=find(fa[x][i],0,k-dis[x][i]);
re-=find(fa[x][i+1],1,k-dis[x][i]);
}
}
return re;
}
int main() {
scanf("%d%d",&n,&K); K++;
int i,x,y,z;
for(i=1;i<n;i++) {
scanf("%d%d%d",&x,&y,&z); add(x,y,z); add(y,x,z);
}
fk[0]=1<<30; tot=n; gr(1,0); solve(root);
for(i=1;i<=n;i++) {
int l=0,r=n*10+1;
while(l<r) {
int mid=(l+r)>>1;
int tmp=query(i,mid);
if(tmp>=K) r=mid;
else l=mid+1;
}
printf("%d\n",l);
}
}
BZOJ4317: Atm的树+2051+2117的更多相关文章
- [BZOJ2051]A Problem For Fun/[BZOJ2117]Crash的旅游计划/[BZOJ4317]Atm的树
[BZOJ2051]A Problem For Fun/[BZOJ2117]Crash的旅游计划/[BZOJ4317]Atm的树 题目大意: 给出一个\(n(n\le10^5)\)个结点的树,每条边有 ...
- BZOJ4317: Atm的树
Description Atm有一段时间在虐qtree的题目,于是,他满脑子都是tree,tree,tree…… 于是,一天晚上他梦到自己被关在了一个有根树中,每条路径都有边权,一个神秘的声音告诉他, ...
- 【BZOJ4317】Atm的树 动态树分治+二分+线段树
[BZOJ4317]Atm的树 Description Atm有一段时间在虐qtree的题目,于是,他满脑子都是tree,tree,tree…… 于是,一天晚上他梦到自己被关在了一个有根树中,每条路径 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- MVC图片上传详解 IIS (安装SSL证书后) 实现 HTTP 自动跳转到 HTTPS C#中Enum用法小结 表达式目录树 “村长”教你测试用例 引用provinces.js的三级联动
MVC图片上传详解 MVC图片上传--控制器方法 新建一个控制器命名为File,定义一个Img方法 [HttpPost]public ActionResult Img(HttpPostedFile ...
- BZOJ 2157: 旅游( 树链剖分 )
树链剖分.. 样例太大了根本没法调...顺便把数据生成器放上来 -------------------------------------------------------------------- ...
- 我眼中的Linux设备树(二 节点)
二 节点(node)的表示首先说节点的表示方法,除了根节点只用一个斜杠"/"表示外,其他节点的表示形式如"node-name@unit-address".@前边 ...
- BZOJ4317Atm的树&BZOJ2051A Problem For Fun&BZOJ2117[2010国家集训队]Crash的旅游计划——二分答案+动态点分治(点分树套线段树/点分树+vector)
题目描述 Atm有一段时间在虐qtree的题目,于是,他满脑子都是tree,tree,tree…… 于是,一天晚上他梦到自己被关在了一个有根树中,每条路径都有边权,一个神秘的声音告诉他,每个点到其他的 ...
- Linux设备树(二 节点)
二 节点(node)的表示 首先说节点的表示方法,除了根节点只用一个斜杠“/”表示外,其他节点的表示形式如“node-name@unit-address”.@前边是节点名字,后边是节点地址.节点名字的 ...
随机推荐
- linux下nginx安装php
把php安装包上传到linux的/usr/local/src 1.解压 cd /usr/local/src tar zxvf php-5.6.9.tar.gz cd php-5.6.9 2.编译安装 ...
- 用象棋的思维趣说IT人的职业发展和钱途
最近我花了不少功夫在学习象棋,也学习了王天一等高手的棋路,感觉IT人的职业和下棋一样,往好了讲,争主动权争实惠只争朝夕,往坏了讲,一步走错得用多步来弥补,如果错误太大未必能弥补回来.在本文里,就用下棋 ...
- 【BZOJ3991】[SDOI2015]寻宝游戏 树链的并+set
[BZOJ3991][SDOI2015]寻宝游戏 Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩 ...
- Android5.0以后版本把应用移动到SD或者TF卡的方法
由于手机内存较小,才8G,用的时间一久,内部存储就满了,天天删垃圾,WIFI还老断线,终于忍无可忍了,决定把应用移动到SD卡,实践下来,只有少部分App默认支持移动到SD卡,大部分程序不支持只能装在内 ...
- transport connector和network connector
1 什么是transport connector 用于配置activemq服务器端和客户端之间的通信方式. 2 什么是network connector 用于配置activemq服务器之间的通信方式, ...
- jsp联合javascript操作html
1 执行的先后顺序 jsp先处理,给页面里面的变量赋值等等.然后整个页面发送给客户端,在客户端执行javascipt相关的代码. 2 jsp文件的构成 html文件+java程序片段+jsp标签=js ...
- Java语言实现简单FTP软件------>本地文件管理模块的实现(九)
首先看一下界面: 1.本地文件列表的显示功能 将本地的当前目录下所有文件显示出来,并显示文件的属性包括文件名.大小.日期.通过javax.swing.JTable()来显示具体的数据.更改当前文件目录 ...
- spring 事物管理
示例:模拟实现转账操作,"A"转给"B"1000,"A"少1000而"B"多一千. 一.转账环境搭建 1.xml配置文件 ...
- ros下单目相机校正
1. 安装对应的驱动与程序包. 图像对应包 http://wiki.ros.org/camera_calibration 在gitbub下载image_pipeline : ...
- TextView属性
TextView及其子类,当字符内容太长显示不下时可以省略号代替未显示的字符:省略号可以在显示区域的起始,中间,结束位置,或者以跑马灯的方式显示文字(textview的状态为被选中). 其实现只需在x ...