• 倍增求LCA


    LCA:(Least Common Ancestors),即最近公共祖先节点。

     1 const int maxn = 100003;
     2 const int maxl = 19;
     3 
     4 struct Edge {
     5     int t;
     6     Edge *ne;
     7 };
     8 
     9 int dep[maxn], up[maxn][maxl];
    10 Edge *head[maxn];
    11 
    12 void DFS(int u) {
    13     for (int i = 1; i < maxl; ++ i) {
    14         up[u][i] = up[up[u][i - 1]][i - 1];
    15     }
    16     for (Edge* e = head[u]; e; e = e->ne) { // 枚举儿子
    17         if (!dep[e->t]) {
    18             dep[e->t] = dep[u] + 1;
    19             up[e->t][0] = u;
    20             DFS(e->t);
    21         }
    22     }
    23 }
    24 
    25 int LCA(int u, int v) {
    26     if (dep[u] < dep[v]) {
    27         swap(u, v);
    28     }
    29     for (int i = maxl - 1; i >= 0; -- i) {
    30         if (dep[up[u][i]] >= dep[v]) {
    31             u = up[u][i];
    32         }
    33     }//保证深度相同 
    34     if (u == v) {
    35         return u;
    36     }
    37     for (int i = maxl - 1; i >= 0; -- i) {
    38         if (up[u][i] != up[v][i]) {
    39             u = up[u][i];
    40             v = up[v][i];
    41         }
    42     }
    43     return up[u][0];
    44 }
    45 
    46 int main() {
    47     memset(dep, -1, sizeof(dep));
    48     dep[1] = 0;
    49     up[1][0] = 0;
    50     DFS(1);
    51     while (q --) {
    52         int u, v;
    53         cin >> u >> v;
    54         cout << LCA(u, v) << endl;
    55     }
    56 }
  • 相关阅读:
    java文件压缩与解压
    常见Java库漏洞汇总
    ref:Spring JDBC框架
    ref:web 防止SQL注入方法
    ref:spring配置数据库方式
    ref:web security最新学习资料收集
    Hack12306
    mysql copy data from table to another
    MYSQL
    tcpdump 抓包过滤
  • 原文地址:https://www.cnblogs.com/9pounds15pence/p/6349679.html
Copyright © 2020-2023  润新知