Submission #4641578


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
const int MAXV = 100010;
const int MAX_DEPTH = 21;
vector<int> g[MAXV];

int parent[MAXV][MAX_DEPTH];
int depth[MAXV];

void dfs(int v, int p, int d){
    parent[v][0] = p;
    depth[v] = d;
    for(int i = 0; i < g[v].size(); i++){
        if(g[v][i] != p) dfs(g[v][i], v, d + 1);
    }      
}

void init(int s, int n){
    memset(parent, -1, sizeof(parent));
    dfs(s, -1, 0);
    for(int i = 0; i + 1 < MAX_DEPTH; i++){
        for(int v = 0; v < n; v++){
            // 2^k個次に要素がないとき
            if(parent[v][i] < 0) parent[v][i+1] = -1;
            // 2^k個次に要素の2^k個次の要素は2^(k+1)個次の要素
            else parent[v][i+1] = parent[parent[v][i]][i];
        }
    }
}

int lca(int u, int v){
    if(depth[u] > depth[v]) swap(u, v);
    for(int i = 0; i < MAX_DEPTH; i++){
        if(((depth[v] - depth[u]) >> i) & 1){
            v = parent[v][i];
        }
    }
    if(u == v) return u;
    for(int i = MAX_DEPTH - 1; i >= 0; i--){
        if(parent[u][i] != parent[v][i]){
            u = parent[u][i];
            v = parent[v][i];
        }
    }
    return parent[u][0];
}


int main(){
    int n, q;
    cin >> n;
    for(int i = 0; i < n - 1; i++){
        int x, y;
        cin >> x >> y;
        x--; y--;
        g[x].push_back(y);
        g[y].push_back(x); 
    }
    init(0, n);
    cin >> q;
    for(int i = 0; i < q; i++){
        int a, b;
        cin >> a >> b;
        a--; b--;
        cout << depth[a] + depth[b] - 2 * depth[lca(a, b)] + 1 << endl;
    }
    return 0;
}

Submission Info

Submission Time
Task D - 閉路
User swkfn
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1657 Byte
Status AC
Exec Time 397 ms
Memory 21248 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 5 ms 10752 KB
subtask0_sample02.txt AC 5 ms 10752 KB
subtask0_sample03.txt AC 5 ms 10752 KB
subtask1_01.txt AC 98 ms 20608 KB
subtask1_02.txt AC 99 ms 20608 KB
subtask1_03.txt AC 5 ms 10752 KB
subtask1_04.txt AC 5 ms 10752 KB
subtask1_05.txt AC 6 ms 10880 KB
subtask1_06.txt AC 6 ms 10880 KB
subtask1_07.txt AC 113 ms 14464 KB
subtask1_08.txt AC 109 ms 14336 KB
subtask1_09.txt AC 113 ms 14336 KB
subtask1_10.txt AC 108 ms 14336 KB
subtask1_11.txt AC 105 ms 14336 KB
subtask1_12.txt AC 119 ms 14336 KB
subtask2_01.txt AC 323 ms 21248 KB
subtask2_02.txt AC 324 ms 21120 KB
subtask2_03.txt AC 205 ms 11008 KB
subtask2_04.txt AC 215 ms 11008 KB
subtask2_05.txt AC 230 ms 11136 KB
subtask2_06.txt AC 227 ms 11264 KB
subtask2_07.txt AC 379 ms 14720 KB
subtask2_08.txt AC 371 ms 14592 KB
subtask2_09.txt AC 366 ms 14720 KB
subtask2_10.txt AC 382 ms 14720 KB
subtask2_11.txt AC 397 ms 14720 KB
subtask2_12.txt AC 380 ms 14720 KB