bzoj 2599 数分治 点剖分
具体可以见漆子超的论文
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/
//By BLADEVIL
var
n, m :longint;
pre, other, len :array[..] of longint;
last :array[..] of longint;
l, top :longint;
size, stack, yy, ll :array[..] of longint;
ff :array[..] of boolean;
root :longint;
b :array[..] of longint;
old :longint;
ans :longint;
procedure connect(x,y,z:longint);
begin
inc(l);
pre[l]:=last[x];
last[x]:=l;
other[l]:=y;
len[l]:=z;
end;
procedure dfs_size(x,fa:longint);
var
q, p :longint;
begin
size[x]:=;
inc(top);
stack[top]:=x;
q:=last[x];
while q<> do
begin
p:=other[q];
if (ff[q]) or (p=fa) then
begin
q:=pre[q];
continue;
end;
dfs_size(p,x);
inc(size[x],size[p]);
q:=pre[q];
end;
yy[x]:=fa;
end;
procedure getroot(u:longint);
var
ms, s, x, p, q :longint;
i :longint;
begin
top:=;
dfs_size(u,);
ms:=maxlongint;
for i:= to top do
begin
x:=stack[i];
s:=size[u]-size[x];
q:=last[x];
while q<> do
begin
p:=other[q];
if (ff[q]) or (p=yy[x]) then
begin
q:=pre[q];
continue;
end;
if size[p]>s then s:=size[p];
q:=pre[q];
end;
if s<ms then
begin
ms:=s;
root:=x;
end;
end;
end;
procedure dfs_value(x,fa,lz,dep:longint);
var
q, p :longint;
begin
if lz>m then exit;
if dep>=ans then exit;
if b[m-lz]>= then
if b[m-lz]+dep<ans then ans:=b[m-lz]+dep;
if (b[lz]<) or (dep<b[lz]) then
begin
inc(top);
stack[top]:=lz;
ll[top]:=dep;
end;
q:=last[x];
while q<> do
begin
p:=other[q];
if (p=fa) or (ff[q]) then
begin
q:=pre[q];
continue;
end;
dfs_value(p,x,lz+len[q],dep+);
q:=pre[q];
end;
end;
procedure solve(u:longint);
var
i, q, p :longint;
begin
getroot(u);
if top= then exit;
top:=;
q:=last[root];
while q<> do
begin
p:=other[q];
if ff[q] then
begin
q:=pre[q];
continue;
end;
old:=top+;
dfs_value(p,root,len[q],);
for i:=old to top do
if (b[stack[i]]<) or (b[stack[i]]>ll[i]) then b[stack[i]]:=ll[i];
q:=pre[q];
end;
for i:= to top do b[stack[i]]:=-;
q:=last[root];
while q<> do
begin
p:=other[q];
if ff[q] then
begin
q:=pre[q];
continue;
end;
ff[q]:=true;
ff[q xor ]:=true;
solve(p);
q:=pre[q];
end;
end;
procedure main;
var
i :longint;
x, y, z :longint;
begin
read(n,m);
l:=;
fillchar(b,sizeof(b),$ff);
b[]:=;
for i:= to n- do
begin
read(x,y,z);
inc(x); inc(y);
connect(x,y,z);
connect(y,x,z);
end;
ans:=maxlongint;
solve();
if ans> then writeln(-) else writeln(ans);
end;
begin
main;
end.
bzoj 2599 数分治 点剖分的更多相关文章
- bzoj 2599(点分治)
2599: [IOI2011]Race Time Limit: 70 Sec Memory Limit: 128 MBSubmit: 3642 Solved: 1081[Submit][Statu ...
- BZOJ 2243 染色 | 树链剖分模板题进阶版
BZOJ 2243 染色 | 树链剖分模板题进阶版 这道题呢~就是个带区间修改的树链剖分~ 如何区间修改?跟树链剖分的区间询问一个道理,再加上线段树的区间修改就好了. 这道题要注意的是,无论是线段树上 ...
- BZOJ 2599: [IOI2011]Race( 点分治 )
数据范围是N:20w, K100w. 点分治, 我们只需考虑经过当前树根的方案. K最大只有100w, 直接开个数组CNT[x]表示与当前树根距离为x的最少边数, 然后就可以对根的子树依次dfs并更新 ...
- bzoj 2599 [IOI2011]Race (点分治)
[题意] 问树中长为k的路径中包含边数最少的路径所包含的边数. [思路] 统计经过根的路径.假设当前枚举到根的第S个子树,若x属于S子树,则有: ans<-dep[x]+min{ dep[y] ...
- BZOJ 2599 [IOI2011]Race【Tree,点分治】
给出N(1 <= N <= 200000)个结点的树,求长度等于K(1 <= K <= 1000000)的路径的最小边数. 点分治,这道题目和POJ 2114很接近,2114是 ...
- 【BZOJ 2599】【IOI 2011】Race 点分治
裸的点分治,然而我因为循环赋值$s$时把$i <= k$写成$i <= n$了,WA了好长时间 #include<cstdio> #include<cstring> ...
- BZOJ 2599 Race(树分治)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2599 题意:给一棵树,每条边有权.求一条路径,权值和等于K,且边的数量最小. 题意:每次 ...
- bzoj 2599: [IOI2011]Race (点分治 本地过了就是过了.jpg)
题面:(复制别人的...) Description 给一棵树,每条边有权.求一条路径,权值和等于K,且边的数量最小. Input 第一行 两个整数 n, k第二..n行 每行三个整数 表示一条无向边的 ...
- bzoj 2599: [IOI2011]Race【点分治】
点分治,用一个mn[v]数组记录当前root下长为v的链的最小深度,每次新加一个儿子的时候都在原来儿子更新过的mn数组里更新ans(也就是查一下mn[m-dis[p]]+de[p]) 这里注意更新和初 ...
随机推荐
- mac配置iterm2和ohmyzsh
点击我直通 iTerm2下载 利用命令下载ohmyzsh curl -L http://install.ohmyz.sh | sh 安装好之后,运行 vi ~/.zshrc 可以查看到以下配置内容信息 ...
- python & pandas链接mysql数据库
Python&pandas与mysql连接 1.python 与mysql 连接及操作,直接上代码,简单直接高效: import MySQLdb try: conn = MySQLdb.con ...
- STM32F0xx_DMA收发USART数据配置详细过程
前言 关于DMA(Direct Memory Access)的功能,前面关注我微信的人应该知道,其实我已经在F1芯片上简单讲了一下.有网友要求在F0讲解一下使用DMA收发串口数据.今天就应网友要求总结 ...
- JavaWeb之 JSP基础
什么是JSP JSP的全称是java server page, java服务页面.是提供java服务的页面~ 那么和Servlet有什么区别呢?JSP的页面既可以写java代码~也可以写html代码哦 ...
- DB2查看用户表与指定用户表表结构
1.在dos中查看用户表 1.1查看表 DB2 LIST TABLES FOR USER 1.2 查看表结构 DB2 describe table A 2.在DB2连接工具中(这里以SQLdbx为例子 ...
- Sql Server数据的加密与解密
Sql Server数据的加密与解密 在sql server中,我们如何为数据进行加密与解密,避免使用者窃取机密数据? 对于一些敏感数据,如密码.卡号,一般不能使用正常数值来存储.否则会有安全隐患.以 ...
- PHP 文件操作函数大全
<?php 读取文件夹: $handler = opendir("c:\");//打开文件夹 while($dir = readdir($handler)){//遍历文件夹 ...
- React Native相关
安装相关工具参考(视频):http://ninghao.net/course/3001?a=26 学习参考:http://reactnative.cn/ 学习参考:http://www.ruanyif ...
- Linux/Android 系统怎么修改mac地址
使用 busybox ifconfig eth0 hw ether AA:BB:CC:DD:EE 可以修改, 但是每次重启都会改回原来的. 所以要修改 /etc/init.mini210.sh (可能 ...
- AngularJs学习笔记-慕课网AngularJS实战
第1章 快速上手 放弃了IE8以及以下,不支持. 4大核心特性: 1.MVC Model: 数据模型 View:视图 Controller:业务逻辑和控制逻辑 好处:职责清晰,模块化. 2.模块化 3 ...