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;
    }
    缘分让我们相遇乱世以外, 命运却要我们危难中相爱。 也许未来遥远在光年之外, 我愿守候未知里为你等待。
  • 相关阅读:
    POJ 1470 -- Closest Common Ancestors
    js跳转链接的几种方式
    vue移动端项目经验(二)
    css项目知识小汇总
    浏览器滚动条样式自定义(兼容火狐)
    媒体查询
    vue移动端项目经验
    文字溢出时省略号表示
    vue2.0-4.0的移动端及PC端屏幕大小适配
    vue移动端UI组件库
  • 原文地址:https://www.cnblogs.com/zw130-lzr-blogs/p/10967190.html
Copyright © 2011-2022 走看看