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 |
|
|
|
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 |