Submission #7483038


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

vector<vector<int> > tree(100010);

template< typename G >
struct DoublingLowestCommonAncestor {
    const int LOG;
    vector< int > dep;
    const G &g;
    vector< vector< int > > table;

    DoublingLowestCommonAncestor(const G &g) : g(g), dep(g.size()), LOG(32 - __builtin_clz(g.size())) {
        table.assign(LOG, vector< int >(g.size(), -1));
    }

    void dfs(int idx, int par, int d) {
        table[0][idx] = par;
        dep[idx] = d;
        for(auto &to : g[idx]) {
            if(to != par) dfs(to, idx, d + 1);
        }
    }

    void build() {
        dfs(0, -1, 0);
        for(int k = 0; k + 1 < LOG; k++) {
            for(int i = 0; i < table[k].size(); i++) {
                if(table[k][i] == -1) table[k + 1][i] = -1;
                else table[k + 1][i] = table[k][table[k][i]];
            }
        }
    }

    int query(int u, int v) {
        if(dep[u] > dep[v]) swap(u, v);
        for(int i = LOG - 1; i >= 0; i--) {
            if(((dep[v] - dep[u]) >> i) & 1) v = table[i][v];
        }
        if(u == v) return u;
        for(int i = LOG - 1; i >= 0; i--) {
            if(table[i][u] != table[i][v]) {
                u = table[i][u];
                v = table[i][v];
            }
        }
        return table[0][u];
    }
};

int dist[100010] = {};
int used[100010];

void dfs(int i, int d){
    dist[i] = d;
    used[i] = 1;

    for(int j = 0;j < tree[i].size();j++){
        if(!used[tree[i][j]]){
            dfs(tree[i][j], d+1);
        }
    }
    return;
}

int main(){
    int n;
    int x, y;
    cin >> n;

    for(int i = 0;i < n-1;i++){
        cin >> x >> y;
        x--; y--;
        tree[x].push_back(y);
        tree[y].push_back(x);
    }

    DoublingLowestCommonAncestor<vector<vector<int> > >  lca(tree);
    lca.build();
    dfs(0, 0);


    int q; cin >> q;
    for(int p = 0;p < q;p++){
        int a, b;
        cin >> a >> b;
        a--;
        b--;
        cout << dist[a] + dist[b] - 2 * dist[lca.query(a, b)] +1 << endl;
    }

    return 0;
}

Submission Info

Submission Time
Task D - 閉路
User yta_smh17
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2160 Byte
Status AC
Exec Time 381 ms
Memory 17400 KB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 30 / 30 70 / 70
Status
AC × 3
AC × 12
AC × 27
Set Name Test Cases
Sample subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt
Subtask1 subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt
Subtask2 subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt
Case Name Status Exec Time Memory
subtask0_sample01.txt AC 7 ms 9984 KB
subtask0_sample02.txt AC 7 ms 9984 KB
subtask0_sample03.txt AC 7 ms 9984 KB
subtask1_01.txt AC 76 ms 16632 KB
subtask1_02.txt AC 76 ms 16632 KB
subtask1_03.txt AC 7 ms 9984 KB
subtask1_04.txt AC 7 ms 9984 KB
subtask1_05.txt AC 7 ms 10112 KB
subtask1_06.txt AC 8 ms 10112 KB
subtask1_07.txt AC 89 ms 13688 KB
subtask1_08.txt AC 86 ms 13560 KB
subtask1_09.txt AC 91 ms 13560 KB
subtask1_10.txt AC 92 ms 13560 KB
subtask1_11.txt AC 93 ms 13560 KB
subtask1_12.txt AC 92 ms 13560 KB
subtask2_01.txt AC 295 ms 17400 KB
subtask2_02.txt AC 295 ms 17272 KB
subtask2_03.txt AC 212 ms 9984 KB
subtask2_04.txt AC 239 ms 11768 KB
subtask2_05.txt AC 228 ms 10112 KB
subtask2_06.txt AC 232 ms 10112 KB
subtask2_07.txt AC 363 ms 13944 KB
subtask2_08.txt AC 365 ms 13944 KB
subtask2_09.txt AC 373 ms 13944 KB
subtask2_10.txt AC 381 ms 13944 KB
subtask2_11.txt AC 380 ms 13944 KB
subtask2_12.txt AC 380 ms 13944 KB