Submission #7499259
Source Code Expand
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define MAX_V 100000 vector<int> G[MAX_V]; int V; int par[20][MAX_V], depth[MAX_V]; // par[k][v] := vの2^k先の祖先(根を超すときは-1) void dfs(int v, int p, int d) { par[0][v] = 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 root = 0) { dfs(root, -1, 0); for (int k = 0; k <= (int)log2(V); k++) { for (int v = 0; v < V; v++) { if (par[k][v] < 0) par[k + 1][v] = -1; else par[k + 1][v] = par[k][par[k][v]]; } } } int lca(int u, int v) { if (depth[u] > depth[v]) swap(u, v); for (int k = 0; k <= (int)log2(V); k++) { if ((depth[v] - depth[u]) >> k & 1) { v = par[k][v]; } } if (u == v) return u; for (int k = (int)log2(V); k >= 0; k--) { if (par[k][u] != par[k][v]) { u = par[k][u]; v = par[k][v]; } } return par[0][u]; } int main() { cin >> V; for (int i = 0; i < V - 1; i++) { int x, y; cin >> x >> y; x--, y--; G[x].push_back(y); G[y].push_back(x); } init(); int Q; cin >> Q; for (int i = 0; i < Q; i++) { int a, b, c; cin >> a >> b; a--, b--; c = lca(a, b); cout << depth[a] + depth[b] - 2 * depth[c] + 1 << endl; } return 0; }
Submission Info
Submission Time | |
---|---|
Task | D - 閉路 |
User | syak |
Language | C++14 (GCC 5.4.1) |
Score | 100 |
Code Size | 1572 Byte |
Status | AC |
Exec Time | 381 ms |
Memory | 20864 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 | 4 ms | 2816 KB |
subtask0_sample02.txt | AC | 2 ms | 2688 KB |
subtask0_sample03.txt | AC | 2 ms | 2688 KB |
subtask1_01.txt | AC | 74 ms | 20224 KB |
subtask1_02.txt | AC | 74 ms | 20224 KB |
subtask1_03.txt | AC | 2 ms | 2688 KB |
subtask1_04.txt | AC | 2 ms | 4736 KB |
subtask1_05.txt | AC | 3 ms | 6784 KB |
subtask1_06.txt | AC | 3 ms | 6784 KB |
subtask1_07.txt | AC | 84 ms | 14080 KB |
subtask1_08.txt | AC | 82 ms | 13952 KB |
subtask1_09.txt | AC | 82 ms | 13952 KB |
subtask1_10.txt | AC | 82 ms | 13952 KB |
subtask1_11.txt | AC | 85 ms | 13952 KB |
subtask1_12.txt | AC | 81 ms | 13952 KB |
subtask2_01.txt | AC | 318 ms | 20864 KB |
subtask2_02.txt | AC | 320 ms | 20736 KB |
subtask2_03.txt | AC | 201 ms | 2816 KB |
subtask2_04.txt | AC | 229 ms | 4864 KB |
subtask2_05.txt | AC | 235 ms | 7040 KB |
subtask2_06.txt | AC | 233 ms | 7168 KB |
subtask2_07.txt | AC | 352 ms | 14336 KB |
subtask2_08.txt | AC | 353 ms | 14208 KB |
subtask2_09.txt | AC | 366 ms | 14336 KB |
subtask2_10.txt | AC | 366 ms | 14336 KB |
subtask2_11.txt | AC | 381 ms | 14336 KB |
subtask2_12.txt | AC | 371 ms | 14336 KB |