Submission #230430
Source Code Expand
#include <algorithm> #include <cstdio> #include <functional> #include <iostream> #include <cstring> #include <climits> #include <cmath> #include <map> #include <queue> #include <sstream> #include <string> #include <vector> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> i_i; typedef pair<ll, int> ll_i; typedef pair<double, int> d_i; typedef pair<ll, ll> ll_ll; struct edge { int u, v; ll w; int rev; }; vector<int> G[100000]; int parent[20][100000]; int depth[100000]; void dfs(int v, int p, int d) { parent[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 V) { dfs(0, -1, 0); for (int k = 0; k + 1 < 20; k++) for (int v = 0; v < V; v++) if (parent[k][v] < 0) parent[k + 1][v] = -1; else parent[k + 1][v] = parent[k][parent[k][v]]; } int lca(int u, int v) { if (depth[u] > depth[v]) swap(u, v); for (int k = 0; k < 20; k++) if ((depth[v] - depth[u]) >> k & 1) v = parent[k][v]; if (u == v) return u; for (int k = 20 - 1; k >= 0; k--) if (parent[k][u] != parent[k][v]) { u = parent[k][u]; v = parent[k][v]; } return parent[0][u]; } int main() { int N; cin >> N; for (int i = 0; i < N - 1; i++) { int x, y; cin >> x >> y; G[x - 1].push_back(y - 1); G[y - 1].push_back(x - 1); } init(N); int Q; cin >> Q; for (; Q > 0; Q--) { int a, b; cin >> a >> b; a--; b--; cout << depth[a] + depth[b] - depth[lca(a, b)] * 2 + 1 << endl; } }
Submission Info
Submission Time | |
---|---|
Task | D - 閉路 |
User | sugim48 |
Language | C++ (G++ 4.6.4) |
Score | 100 |
Code Size | 1578 Byte |
Status | AC |
Exec Time | 782 ms |
Memory | 19112 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 | 31 ms | 3112 KB |
subtask0_sample02.txt | AC | 28 ms | 3232 KB |
subtask0_sample03.txt | AC | 33 ms | 3172 KB |
subtask1_01.txt | AC | 164 ms | 19060 KB |
subtask1_02.txt | AC | 159 ms | 19112 KB |
subtask1_03.txt | AC | 26 ms | 3236 KB |
subtask1_04.txt | AC | 28 ms | 3164 KB |
subtask1_05.txt | AC | 30 ms | 3296 KB |
subtask1_06.txt | AC | 29 ms | 3236 KB |
subtask1_07.txt | AC | 202 ms | 14564 KB |
subtask1_08.txt | AC | 202 ms | 14504 KB |
subtask1_09.txt | AC | 198 ms | 14504 KB |
subtask1_10.txt | AC | 199 ms | 14508 KB |
subtask1_11.txt | AC | 199 ms | 14500 KB |
subtask1_12.txt | AC | 199 ms | 14500 KB |
subtask2_01.txt | AC | 496 ms | 19104 KB |
subtask2_02.txt | AC | 523 ms | 19112 KB |
subtask2_03.txt | AC | 372 ms | 3184 KB |
subtask2_04.txt | AC | 365 ms | 3356 KB |
subtask2_05.txt | AC | 384 ms | 3360 KB |
subtask2_06.txt | AC | 389 ms | 3236 KB |
subtask2_07.txt | AC | 684 ms | 14500 KB |
subtask2_08.txt | AC | 729 ms | 14496 KB |
subtask2_09.txt | AC | 750 ms | 14496 KB |
subtask2_10.txt | AC | 764 ms | 14500 KB |
subtask2_11.txt | AC | 731 ms | 14496 KB |
subtask2_12.txt | AC | 782 ms | 14500 KB |