zoukankan      html  css  js  c++  java
  • SCUTOJ

    https://scut.online/p/362
    和LCA差不多,注意开大点不怕浪费。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    const int MAXN=1e5;
    int head[MAXN+1],nxt[2*MAXN+1],to[2*MAXN+1];
    int top;
    
    void add_edge(int u,int v){
        nxt[top]=head[u];
        to[top]=v;
        head[u]=top++;
        nxt[top]=head[v];
        to[top]=u;
        head[v]=top++;
    }
    
    int a[MAXN+1];
    int f[MAXN+1][20];
    
    void dfs(int u,int fa){
        for(int i=0;i<=18;i++){
            f[u][i+1]=f[f[u][i]][i];
        }
        for(int i=head[u];i!=-1;i=nxt[i]){
            int &v=to[i];
            if(v==fa)
                continue;
            f[v][0]=u;
            dfs(v,u);
        }
    }
    
    int lca(int x,int v){
        for(int i=18;i>=0;i--){
            if(a[f[x][i]]>=v){
                x=f[x][i];
            }
        }
        return x;
    }
    
    int main() {
    #ifdef Yinku
        freopen("Yinku.in","r",stdin);
    #endif // Yinku
        int n,q;
        while(~scanf("%d%d",&n,&q)){
            memset(head,-1,sizeof(head));
            top=0;
            for(int i=1;i<n;i++){
                int f;
                scanf("%d%d",&f,&a[i]);
                add_edge(i,f);
            }
            a[0]=1;
            dfs(0,-1);
            for(int i=0;i<q;i++){
                int u,v;
                scanf("%d%d",&u,&v);
                printf("%d
    ",lca(u,v));
            }
        }
    
        return 0;
    }
    
  • 相关阅读:
    Android-IntentFilter
    Activity-Flag标志位
    设计模式杂谈
    Android-语言国际化
    Android 常见SD卡操作
    Android
    nginx,wsgi,django的关系
    mac安装python-mysql
    mac mysql命令行
    地址空间 32位和64位
  • 原文地址:https://www.cnblogs.com/Yinku/p/11000071.html
Copyright © 2011-2022 走看看