E. 1-Trees and Queries

Posted acerkoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了E. 1-Trees and Queries相关的知识,希望对你有一定的参考价值。

传送门

一道憨憨的 Lca 模板题。

Code

#include <bits/stdc++.h>

using namespace std;

const int maxn = 1e5 + 10;

int anc[maxn][20], dep[maxn];
vector<int> g[maxn];
int n;

void dfs(int x, int fa = 0) {
    for (int i = 1; ~anc[x][i-1] && ~anc[anc[x][i-1]][i-1]; ++i)
        anc[x][i] = anc[anc[x][i-1]][i-1];
    dep[x] = dep[fa] + 1;
    for (auto v: g[x]) {
        if (v == fa) continue;
        anc[v][0] = x;
        dfs(v, x);
    }
}
int lca(int x, int y) {
    if (dep[x] > dep[y]) swap(x, y);
    for (int j = 19; j >= 0; --j) {
        if (~anc[y][j] && dep[anc[y][j]] >= dep[x])
            y = anc[y][j];
    }
    if (x == y) return x;
    for (int j = 19; j >= 0; --j) {
        if (anc[x][j] != anc[y][j]) {
            x = anc[x][j];
            y = anc[y][j];
        }
    }
    return anc[x][0];
}

int main() {
    memset(anc, -1, sizeof anc);
    scanf("%d", &n);
    for (int u, v, i = 1; i < n; ++i) {
        scanf("%d%d", &u, &v);
        g[u].push_back(v);
        g[v].push_back(u);
    }
    dfs(1);
    int q;
    scanf("%d", &q);
    for (int x, y, a, b, k, i = 1; i <= q; ++i) {
        scanf("%d%d%d%d%d", &x, &y, &a, &b, &k);
        int ab = dep[a] + dep[b] - dep[lca(a, b)] * 2;
        int ax = dep[a] + dep[x] - dep[lca(a, x)] * 2;
        int ay = dep[a] + dep[y] - dep[lca(a, y)] * 2;
        int bx = dep[b] + dep[x] - dep[lca(b, x)] * 2;
        int by = dep[b] + dep[y] - dep[lca(b, y)] * 2;
        if (k >= ab && (k - ab) % 2 == 0) {
            puts("YES");
        } else if (k >= (ax + by + 1) && (k - ax - by - 1) % 2 == 0) {
            puts("YES");
        } else if (k >= (ay + bx + 1) && (k - ay - bx - 1) % 2 == 0) {
            puts("YES");
        } else {
            puts("NO");
        }
    }
    return 0;
}

以上是关于E. 1-Trees and Queries的主要内容,如果未能解决你的问题,请参考以下文章

CF1304E 1-Trees and Queries

CF1304E 1-Trees and Queries

[CF1304E] 1-Trees and Queries - LCA

Codeforces 1304E. 1-Trees and Queries

Codeforces 396 E. Valera and Queries

CF-div2-620-E. 1-Trees and Queries LCA 树上点距离