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+77;
int mem[N],*mp=mem;
int n,*e[N][2],v[N],fa[N];
int f[N],q[N],ql=0,qr=0;
int lq[N],rq[N],bq[N];
int id[N][2],bid[N],lp=0,rp=0,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]>=0)return;
    f[w]=d;
    q[++qr]=w;
    if(e[w][0]==e[w][1])printf("%d\n",d);
}
void pre(){
    ql=qr=0;
    bq[bid[1]=++qr]=1;
    while(ql!=qr){
        int w=bq[++ql];
        if(!id[w][0])for(int x=w;;x=e[x][0][0]){
            lq[id[x][0]=++lp]=x;
            if(e[x][0]==e[x][1])break;
        }
        if(!id[w][1])for(int x=w;;x=e[x][1][-1]){
            rq[id[x][1]=++rp]=x;
            if(e[x][0]==e[x][1])break;
        }
        for(int*a=e[w][0],*b=e[w][1];a!=b;bq[bid[*a]=++qr]=*a,++a);
    }
}
int _(){
    int x;
    scanf("%d",&x);
    return x;
}
int main(){
    n=_();
    for(int i=1;i<=n+1;++i)F[i]=i;
    for(int i=1;i<=n;++i)f[i]=-1;
    for(int w=1,c;w<=n;++w){
        v[w]=_();
        c=_();
        for(int j=0;j<c;++j)fa[mp[j]=_()]=w;
        e[w][0]=mp;
        mp+=c;
        e[w][1]=mp;
    }
    pre();
    ql=qr=0;
    chk(1,0);
    while(ql!=qr){
        int w=q[++ql],u,d=f[w]+1;
        for(int*a=e[w][0],*b=e[w][1];a!=b;++a){
            u=*a;
            if(w!=1)chk(u,d);
            for(int L=gf(bid[lq[id[u][0]+v[u]]]),R=bid[rq[id[u][1]+v[u]]];L<=R;chk(bq[L],d),L=F[L]=gf(L+1));
        }
        if(w!=1)chk(fa[w],d);
    }
    return 0;
}
时间: 2024-08-26 18:03:14

bzoj2035: [2009国家集训队]数据读取问题的相关文章

BZOJ 2038: [2009国家集训队]小Z的袜子(hose)

2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7676  Solved: 3509[Submit][Status][Discuss] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只

【BZOJ 2039】 2039: [2009国家集训队]employ人员雇佣 (最小割)

2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1511  Solved: 728 Description 作为一个富有经营头脑的富翁,小L决定从本国最优秀的经理中雇佣一些来经营自己的公司.这些经理相互之间合作有一个贡献指数,(我们用Ei,j表示i经理对j经理的了解程度),即当经理i和经理j同时被雇佣时,经理i会对经理j做出贡献,使得所赚得的利润增加Ei,j.当然,雇佣每一个经理都需要花费一定

BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )

莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) ------------------------------------------------------------------------------ #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 50009; int N,

bzoj 2038 [2009国家集训队]小Z的袜子(hose) 莫队算法

2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 10239  Solved: 4659[Submit][Status][Discuss] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命--具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两

2038: [2009国家集训队]小Z的袜子(hose)

2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 9472  Solved: 4344 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一

BZOJ 2039: [2009国家集训队]employ人员雇佣

2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1369  Solved: 667[Submit][Status][Discuss] Description 作为一个富有经营头脑的富翁,小L决定从本国最优秀的经理中雇佣一些来经营自己的公司.这些经理相互之间合作有一个贡献指数,(我们用Ei,j表示i经理对j经理的了解程度),即当经理i和经理j同时被雇佣时,经理i会对经理j做出贡献,使得所赚得的利

BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块

分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 2938  Solved: 1303 [Submit][Status] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只

BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&amp;&amp;学习笔记】

2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 9894  Solved: 4561[Submit][Status][Discuss] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两

BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Submit][Status][Discuss] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只