zoukankan      html  css  js  c++  java
  • 点的距离

    #include <iostream>
    #include <cstdio>
    #include <string>
    using namespace std;
    int dfn[500001], f[500001][21];
    int n, m, cnt, root;
    int head[500001], lg[500001];
    struct tu {
        int v, nxt;
    } e[5000001];
    void add(int u, int v) {
        e[++cnt].v = v;
        e[cnt].nxt = head[u];
        head[u] = cnt;
    }
    void dfs(int now, int fa) {
        dfn[now] = dfn[fa] + 1;
        f[now][0] = fa;
        for (int i = 1; (1 << i) <= dfn[now]; i++) f[now][i] = f[f[now][i - 1]][i - 1];
        for (int i = head[now]; i; i = e[i].nxt) {
            if (e[i].v != fa)
                dfs(e[i].v, now);
        }
    }
    int lca(int x, int y) {
        if (dfn[x] < dfn[y])
            swap(x, y);
        while (dfn[x] > dfn[y]) {
            x = f[x][lg[dfn[x] - dfn[y]]];
        }
        if (x == y)
            return x;
        for (int k = lg[dfn[x]]; k >= 0; k--)
            if (f[x][k] != f[y][k])
                x = f[x][k], y = f[y][k];
        return f[x][0];
    }
    int main() {
        scanf("%d", &n);
        for (int i = 1; i <= n - 1; i++) {
            int x, y;
            scanf("%d%d", &x, &y);
            add(x, y);
            add(y, x);
        }
        dfs(1, 0);
        lg[0] = -1;
        for (int i = 1; i <= n; i++) lg[i] = lg[i >> 1] + 1;  //求log+1
        // for(int i=1;i<=n;i++)
        // printf("%d ",lg[i]);
        scanf("%d", &m);
        for (int i = 1; i <= m; i++) {
            int x, y;
            scanf("%d%d", &x, &y);
            int mm = dfn[lca(x, y)];
            printf("%d
    ", dfn[x] - mm + dfn[y] - mm);
        }
        return 0;
    }
    缘分让我们相遇乱世以外, 命运却要我们危难中相爱。 也许未来遥远在光年之外, 我愿守候未知里为你等待。
  • 相关阅读:
    TreeList Linq
    MasterDetail Linq
    C# 事务处理
    设计模式——代理模式(Proxy Pattern)
    设计模式——装饰模式(Decorator Pattern)
    C# 调用WCF服务
    加密解密
    Effective C#高效编程(02:常量)
    切换城市功能
    DataPager控件使用
  • 原文地址:https://www.cnblogs.com/zw130-lzr-blogs/p/10967190.html
Copyright © 2011-2022 走看看