bzoj2035: [2009国家集训队]数据读取问题
Description

Input

Output

可以转为边权为1的最短路:将不修改并读取x个数看作有向边,原先树上的边仍保留且视为双向边(但从根出发的边为单向)表示上次读取的修改
第一种边是点到bfs序的一个区间区间连边,用并查集维护bfs序中每个位置下一个未处理的位置即可
为了求出这个bfs序区间,需要知道一个点向左下(右下)走x步到达的点,将树上每个点和其最左(右)孩子间的边保留,删去其它边,得到一些链,维护每个点在链上的位置即可支持询问
求bfs序区间可以做到O(n),bfs由于用到并查集需要O(nlogn)或O(nα(n)),I/O为瓶颈需要O(nlogn)时间
#include<cstdio>
const int N=1e6+;
int mem[N],*mp=mem;
int n,*e[N][],v[N],fa[N];
int f[N],q[N],ql=,qr=;
int lq[N],rq[N],bq[N];
int id[N][],bid[N],lp=,rp=,F[N];
int gf(int x){
while(x!=F[x])x=F[x]=F[F[x]];
return x;
}
void chk(int w,int d){
if(f[w]>=)return;
f[w]=d;
q[++qr]=w;
if(e[w][]==e[w][])printf("%d\n",d);
}
void pre(){
ql=qr=;
bq[bid[]=++qr]=;
while(ql!=qr){
int w=bq[++ql];
if(!id[w][])for(int x=w;;x=e[x][][]){
lq[id[x][]=++lp]=x;
if(e[x][]==e[x][])break;
}
if(!id[w][])for(int x=w;;x=e[x][][-]){
rq[id[x][]=++rp]=x;
if(e[x][]==e[x][])break;
}
for(int*a=e[w][],*b=e[w][];a!=b;bq[bid[*a]=++qr]=*a,++a);
}
}
int _(){
int x;
scanf("%d",&x);
return x;
}
int main(){
n=_();
for(int i=;i<=n+;++i)F[i]=i;
for(int i=;i<=n;++i)f[i]=-;
for(int w=,c;w<=n;++w){
v[w]=_();
c=_();
for(int j=;j<c;++j)fa[mp[j]=_()]=w;
e[w][]=mp;
mp+=c;
e[w][]=mp;
}
pre();
ql=qr=;
chk(,);
while(ql!=qr){
int w=q[++ql],u,d=f[w]+;
for(int*a=e[w][],*b=e[w][];a!=b;++a){
u=*a;
if(w!=)chk(u,d);
for(int L=gf(bid[lq[id[u][]+v[u]]]),R=bid[rq[id[u][]+v[u]]];L<=R;chk(bq[L],d),L=F[L]=gf(L+));
}
if(w!=)chk(fa[w],d);
}
return ;
}
bzoj2035: [2009国家集训队]数据读取问题的更多相关文章
- BZOJ 2039: [2009国家集训队]employ人员雇佣
2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1369 Solved: 667[Submit ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7676 Solved: 3509[Subm ...
- 莫队算法 2038: [2009国家集训队]小Z的袜子(hose)
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 ...
- Bzoj 2038: [2009国家集训队]小Z的袜子(hose) 莫队,分块,暴力
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 5763 Solved: 2660[Subm ...
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) -- 莫队算法 ,,分块
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 3577 Solved: 1652[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )
莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) --------------------------- ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块
分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2938 Solved: 13 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9894 Solved: 4561[Subm ...
随机推荐
- 模拟QQ分组(具有伸缩功能) (添加开源框架的光闪烁效果)SimpleExpandableListAdapter 适配器的用法,并且可添加组及其组内数据。
package com.lixu.qqfenzu; import java.util.ArrayList; import java.util.HashMap; import java.util.Lis ...
- linux fdisk 添加硬盘,分区,挂载,永久挂载
具体步骤: 1.SSH登陆服务器: 2.列出所有硬盘: 命令:ll /dev/disk/by-path 我这里还有个sda 3.查看磁盘分区情况: 命令 :fdisk -l 最上面两部分表示我有两个物 ...
- CentOS 7 Crontab
Crontab默认每分钟读取 /etc/crontab 文件./etc/cron.d/目录和/var/spool/cron/目录一次,3者对应任务的建立格式是一致的,只是/var/spool/cron ...
- JavaScript事件简述
事件简述 技术一般水平有限,有什么错的地方,望大家指正. 事件是我们平时经常使用,这次就来了解一下事件.首先我们要明确几个概念,JavaScript是单线程,浏览器是多线程的,并不是所有的事件处理函数 ...
- pdo::quey excu excute 区别
PDO::query(PHP环境下同)和PDOStatement::execute函数均能实现SELECT查询功能,但官方文档并未见对此设计初衷的说明,此外还有个PDO::exec函数功能也很类似.天 ...
- ios之开发屏幕适配和系统版本适配
ios软件开发过程中很重要的一点是对系统和屏幕进行适配对系统的适配主要是IOS7以后和之前以及IOS8新增特性,屏幕适配主要是对不同设备采用不同的布局以最佳展示效果展现给用户. 针对系统的适配: IO ...
- JSON-java
import net.sf.json.JSONArray; import net.sf.json.JSONObject; JSONObject jsonObject1 = new JSONObject ...
- hdu2085-2086
hdu2085 模拟 #include<stdio.h> ][]; void fun(){ a[][]=; a[][]=; ;i<=;i++){ a[i][]=*a[i-][]+*a ...
- pandas 基础用法
pandas 是一个基于 Numpy 构建, 强大的数据分析工具包 主要功能 独特的数据结构 DataFrame, Series 集成时间序列功能 提供丰富的数学运算操作 灵活处理缺失数据 Serie ...
- Eclipse使用前准备(转)
Eclipse的发布流程 M1 08/19/2009 M2 09/30/2009 M3 11/11/2009 M4 12/16/2009 M ...