Submission #1756099
Source Code Expand
#include <bits/stdc++.h>
#define rep(i, a, n) for(int i = a; i < n; i++)
#define REP(i, n) rep(i, 0, n)
#define repb(i, a, b) for(int i = a; i >= b; i--)
#define all(a) a.begin(), a.end()
#define int long long
#define chmax(x, y) x = max(x, y)
#define chmin(x, y) x = min(x, y)
using namespace std;
typedef pair<int, int> P;
const int mod = 1000000007;
const int INF = 1e12;
const int MAX_V = 100010;
const int MAX_LOG_V = 30;
vector<int> G[MAX_V];
int root = 0;
int parent[MAX_LOG_V][MAX_V];
int depth[MAX_V];
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(root, -1, 0);
for(int k = 0; k + 1 < MAX_LOG_V; 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 < MAX_LOG_V; k++){
if((depth[v] - depth[u]) >> k & 1){
v = parent[k][v];
}
}
if(u == v) return u;
for(int k = MAX_LOG_V - 1; k >= 0; k--){
if(parent[k][u] != parent[k][v]){
u = parent[k][u];
v = parent[k][v];
}
}
return parent[0][u];
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
rep(i, 0, n - 1){
int x, y;
cin >> x >> y;
x--; y--;
G[x].push_back(y);
G[y].push_back(x);
}
init(n);
int q;
cin >> q;
rep(i, 0, q){
int a, b;
cin >> a >> b;
a--; b--;
cout << depth[a] + depth[b] - 2 * depth[lca(a, b)] + 1 << endl;
}
}
Submission Info
Submission Time |
|
Task |
D - 閉路 |
User |
treeone |
Language |
C++14 (GCC 5.4.1) |
Score |
100 |
Code Size |
1854 Byte |
Status |
AC |
Exec Time |
362 ms |
Memory |
36864 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 |
7 ms |
24832 KB |
subtask0_sample02.txt |
AC |
6 ms |
24832 KB |
subtask0_sample03.txt |
AC |
6 ms |
24832 KB |
subtask1_01.txt |
AC |
38 ms |
36224 KB |
subtask1_02.txt |
AC |
38 ms |
36224 KB |
subtask1_03.txt |
AC |
6 ms |
24832 KB |
subtask1_04.txt |
AC |
6 ms |
24832 KB |
subtask1_05.txt |
AC |
7 ms |
24832 KB |
subtask1_06.txt |
AC |
7 ms |
24832 KB |
subtask1_07.txt |
AC |
48 ms |
30592 KB |
subtask1_08.txt |
AC |
49 ms |
30464 KB |
subtask1_09.txt |
AC |
49 ms |
30464 KB |
subtask1_10.txt |
AC |
50 ms |
30464 KB |
subtask1_11.txt |
AC |
50 ms |
30464 KB |
subtask1_12.txt |
AC |
49 ms |
30464 KB |
subtask2_01.txt |
AC |
213 ms |
36864 KB |
subtask2_02.txt |
AC |
211 ms |
36736 KB |
subtask2_03.txt |
AC |
191 ms |
24960 KB |
subtask2_04.txt |
AC |
208 ms |
25088 KB |
subtask2_05.txt |
AC |
225 ms |
25216 KB |
subtask2_06.txt |
AC |
219 ms |
25216 KB |
subtask2_07.txt |
AC |
319 ms |
30848 KB |
subtask2_08.txt |
AC |
325 ms |
30720 KB |
subtask2_09.txt |
AC |
346 ms |
30848 KB |
subtask2_10.txt |
AC |
362 ms |
30848 KB |
subtask2_11.txt |
AC |
332 ms |
30848 KB |
subtask2_12.txt |
AC |
353 ms |
30848 KB |