zoukankan      html  css  js  c++  java
  • 1103: [POI2007]大都市meg

    dfs序+差分+树状数组。这题很简单。

    但是要注意dfs新编号的问题。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    
    struct node
    {
        int x,y,next;
    }a[510000];int len,last[310000];
    void ins(int x,int y)
    {
        len++;
        a[len].x=x;a[len].y=y;
        a[len].next=last[x];last[x]=len;
    }
    int dep[310000],z,l[310000],r[310000];
    void dfs(int x,int f)
    {
        l[x]=++z;
        dep[l[x]]=dep[l[f]]+1;
        for(int k=last[x];k;k=a[k].next)
        {
            int y=a[k].y;
            if(y!=f)
                dfs(y,x);
        }
        r[x]=z;
    }
    
    int n,s[310000];
    int lowbit(int x){return x&-x;}
    void change(int x,int k)
    {
        while(x<=n)
        {
            s[x]+=k;
            x+=lowbit(x);
        }
    }
    int getsum(int x)
    {
        int ret=0;
        while(x>=1)
        {
            ret+=s[x];
            x-=lowbit(x);
        }
        return ret;
    }
    
    char ss[10];
    int main()
    {
        scanf("%d",&n);
        int x,y;
        len=0;memset(last,0,sizeof(last));
        for(int i=1;i<n;i++)
        {
            scanf("%d%d",&x,&y);
            ins(x,y);ins(y,x);
        }
        
        dep[0]=-1;dfs(1,0);
        dep[0]=0;for(int i=1;i<=n;i++)change(i,dep[i]-dep[i-1]);
        
        int m;
        scanf("%d",&m);m=n+m-1;
        while(m--)
        {
            scanf("%s",ss+1);
            if(ss[1]=='A')
            {
                scanf("%d%d",&x,&y);
                if(dep[l[x]]<dep[l[y]])swap(x,y);
                change(l[x],-1);change(r[x]+1,1);
            }
            else
            {
                scanf("%d",&x);
                printf("%d
    ",getsum(l[x]));
            }
        }
        return 0;
    }
  • 相关阅读:
    CSS 3 中的多列属性
    CSS3 3D转换
    CC3中的2D转换
    ubuntu sudo: pip:找不到命令
    ubuntu 下更新pip后发生 ImportError: cannot import name 'main'的问题解决
    ubuntu 安装pip
    gradle下载
    L0,L1,L2正则化浅析
    安装使用离线版本的维基百科(Wikipedia)
    Linux中CPU亲和性(affinity)
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/8521993.html
Copyright © 2011-2022 走看看