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

时间:2022-06-11 20:57:21

Description

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

Input

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

Output

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

可以转为边权为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国家集训队]数据读取问题的更多相关文章

  1. BZOJ 2039&colon; &lbrack;2009国家集训队&rsqb;employ人员雇佣

    2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1369  Solved: 667[Submit ...

  2. BZOJ 2038&colon; &lbrack;2009国家集训队&rsqb;小Z的袜子&lpar;hose&rpar; &lbrack;莫队算法&rsqb;【学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Subm ...

  3. BZOJ 2038&colon; &lbrack;2009国家集训队&rsqb;小Z的袜子&lpar;hose&rpar;

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7676  Solved: 3509[Subm ...

  4. 莫队算法 2038&colon; &lbrack;2009国家集训队&rsqb;小Z的袜子&lpar;hose&rpar;

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 ...

  5. Bzoj 2038&colon; &lbrack;2009国家集训队&rsqb;小Z的袜子&lpar;hose&rpar; 莫队&comma;分块&comma;暴力

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 5763  Solved: 2660[Subm ...

  6. BZOJ2038&colon; &lbrack;2009国家集训队&rsqb;小Z的袜子&lpar;hose&rpar; -- 莫队算法 ,,分块

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 3577  Solved: 1652[Subm ...

  7. BZOJ 2038&colon; &lbrack;2009国家集训队&rsqb;小Z的袜子&lpar;hose&rpar; &lpar; 莫队 &rpar;

    莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) --------------------------- ...

  8. BZOJ 2038&colon; &lbrack;2009国家集训队&rsqb;小Z的袜子&lpar;hose&rpar; 分块

    分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 2938  Solved: 13 ...

  9. BZOJ 2038&colon; &lbrack;2009国家集训队&rsqb;小Z的袜子&lpar;hose&rpar;【莫队算法裸题&amp&semi;&amp&semi;学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 9894  Solved: 4561[Subm ...

随机推荐

  1. 自己写一个 jQuery 插件

    我知道这一天终将会到来,现在,它来了. 需求 开发 SharePoint 的 CSOM 应用时,经常需要在网页上输出一些信息. 这种需求和 alert 的弹窗.F12 的断点查看信息的场景是不一样的: ...

  2. 剑指Offer 通过中序和先序遍历重建二叉树

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...

  3. snakeyaml - Documentation&period;wiki

    SnakeYAML Documentation This documentation is very brief and incomplete. Feel free to fix or improve ...

  4. Android5&period;0之CoordinatorLayout的使用

    CoordinatorLayout,中文译作协调者布局,光听这名字你可能很难判断出协调者布局有什么特点,那么我们来看看下面一张图片: 由于CSDN对图片大小的要求,我只能录制一个快速播放的动画,请大家 ...

  5. DBMS&lowbar;STATS常用方法(收集oracle信息)

    –收集数据库信息EXEC DBMS_STATS.gather_database_stats;EXEC DBMS_STATS.gather_database_stats(estimate_percent ...

  6. Temporal Action Detection with Structured Segment Networks &lpar;ssn&rpar;【转】

    Action Recognition: 行为识别,视频分类,数据集为剪辑过的动作视频 Temporal Action Detection: 从未剪辑的视频,定位动作发生的区间,起始帧和终止帧并预测类别 ...

  7. js 倒计时10s

    <button id="send">允许点击</button> var wait = 10; function time(o){ if(wait==0){ ...

  8. linux&lowbar;文件基本操作

    创建文件 $ touch [文件名]

  9. selenium2&period;0关于python的常用函数

    转: 新建实例driver = webdriver.Chrome() 1.获取当前页面的Url函数 方法:current_url 实例: driver.current_url 2.获取元素坐标 方法: ...

  10. java Swing包相关知识点

    1.窗体的创建及相关的常用设置 //创建一个窗体 JFrame jf=new JFrame("第一步句法分析"); //设置用户在此窗体上发起 "close" ...