zoukankan      html  css  js  c++  java
  • poj3417 暗的连锁


    主体还是求lca啦

    看代码

    #include<iostream>
    using namespace std;
    const int mxn=1e5+5; 
    int n,m;
    int f[mxn][30],w[mxn*5],d[mxn];
    struct vec{
        int nxt,to;
    }g[2*mxn];
    int first[mxn],len;
    void add(int x,int y){
        g[++len].to=y;
        g[len].nxt=first[x];
        first[x]=len;
    }
    void pre(int u,int fa){
        d[u]=d[fa]+1;
        for(int i=1;i<=19;i++){
            f[u][i]=f[f[u][i-1]][i-1]; 
        }
        for(int i=first[u];i;i=g[i].nxt){
            int v=g[i].to;
            if(v!=fa){
                f[v][0]=u;
                pre(v,u);
            }
        }
    }
    int lca(int x,int y){
        if(d[x]<d[y]){
            swap(x,y);
        }
        for(int i=19;i>=0;i--){
            if(d[f[x][i]]>=d[y]){
                x=f[x][i];
            }
            if(x==y){
                return x;
            }
        }
        for(int i=19;i>=0;i--){
            if(f[x][i]!=f[y][i]){
                x=f[x][i];
                y=f[y][i];
            } 
        }
        return f[x][0];
    }
    void dfs(int u,int fa){
        for(int i=first[u];i;i=g[i].nxt){
            int v=g[i].to;
            if(v!=fa){
                dfs(v,u);
                w[u]+=w[v];
            }
        }
    }
    int ans=0;
    int main(){
        cin>>n>>m;
        int a,b;
        for(int i=1;i<n;i++){
            scanf("%d%d",&a,&b);
            add(a,b);
            add(b,a);
        }
        pre(1,0);
        for(int i=1;i<=m;i++){
            scanf("%d%d",&a,&b);
            w[a]++;
            w[b]++;
            w[lca(a,b)]-=2;
        }
        dfs(1,0);
        for(int i=2;i<=n;i++){
            if(w[i]==1){
                ans++;
            }
            if(w[i]==0){
                ans+=m;
            }
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    高程5.4 RegExp类型
    高程5.3 Date类型
    高程5.2.9归并方法
    20151119js上课总结
    从0~100之间随机取出不重复的10个数
    高程5.2.8迭代方法
    HTML常用标签
    20151118小问题
    20151117小问题
    《QT Creator快速入门》
  • 原文地址:https://www.cnblogs.com/duojiaming/p/11298235.html
Copyright © 2011-2022 走看看