zoukankan      html  css  js  c++  java
  • bzoj 3319 黑白树

    暴力大法好!!!!!

    纯暴力修改+查询。

    此题数据卡所有正解,就是不卡暴力(经测试,在每点1s下,几乎所有正解都T了)

    暴力压正解。。。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<cmath>
    #include<algorithm>
    #define N 1000005
    using namespace std;
    int e=1,head[N];
    struct edge{
        int u,v,next;
    }ed[2*N];
    void add(int u,int v){
        ed[e].u=u; ed[e].v=v;
        ed[e].next=head[u]; head[u]=e++;
    }
    int fa[N],dep[N],id[N];
    bool bo[N];
    void dfs1(int x,int f,int d){
        fa[x]=f; dep[x]=d;
        for(int i=head[x];i;i=ed[i].next){
            int v=ed[i].v;
            if(v==f) continue;
            id[v]=(i+1)/2;
            dfs1(v,x,d+1);
        }
    }
    void col(int x,int y){
        if(dep[x]>dep[y]) swap(x,y);
        while(dep[y]>dep[x]){
            bo[id[y]]=1;
            y=fa[y];
        }
        if(x==y) return;
        while(x!=y){
            bo[id[x]]=1; x=fa[x];
            bo[id[y]]=1; y=fa[y];
        }
        return;
    }
    int pre(int x){
        while(x!=1&&!bo[id[x]])
            x=fa[x];
        return x==1?0:id[x];
    }
    int n,m;
    int main()
    {
        scanf("%d%d",&n,&m);
        int u,v;
        for(int i=1;i<n;i++){
            scanf("%d%d",&u,&v);
            add(u,v);  add(v,u);
        }
        dfs1(1,0,1);
        int opt,x,y;
        while(m--){
            scanf("%d",&opt);
            switch(opt){
                case 1: scanf("%d",&x); printf("%d
    ",pre(x)); break;
                case 2: scanf("%d%d",&x,&y); col(x,y); break;
            }
        }
        return 0;
    }


  • 相关阅读:
    AtCoder Regular Contest 093
    AtCoder Regular Contest 094
    G. Gangsters in Central City
    HGOI 20190711 题解
    HGOI20190710 题解
    HGOI 20190709 题解
    HGOI 20190708 题解
    HGOI20190707 题解
    HGOI20190706 题解
    HGOI 20190705 题解
  • 原文地址:https://www.cnblogs.com/Ren-Ivan/p/7746746.html
Copyright © 2011-2022 走看看