Submission #5896934
Source Code Expand
#include <iostream>
#include <vector>
using namespace std;
int N;
class LCA{
private:
vector<vector<int>> v;
vector<vector<int>> parent;
vector<int> depth;
// int parent[21][100010];
// int depth[100010] = {};
void dfs(int n,int m,int d){
parent[0][n] = m;
depth[n] = d;
for(auto x:v[n]){
if(x!=m) dfs(x,n,d+1);
}
}
public:
LCA(int N,int root,vector<vector<int>>& tree){
v = tree;
parent = vector<vector<int>>(21,vector<int>(N+1,0));
depth = vector<int>(N+1,0);
dfs(root,-1,0);
for(int j=0;j+1<20;j++){
for(int i=1;i<=N;i++){
if(parent[j][i]<0) parent[j+1][i] = -1;
else parent[j+1][i] = parent[j][parent[j][i]];
}
}
}
void init(int N,int root){
dfs(root,-1,0);
for(int j=0;j+1<20;j++){
for(int i=1;i<=N;i++){
if(parent[j][i]<0) parent[j+1][i] = -1;
else parent[j+1][i] = parent[j][parent[j][i]];
}
}
}
int lca(int n,int m){
if(depth[n]>depth[m]) swap(n,m);
for(int j=0;j<20;j++){
if((depth[m]-depth[n]) >> j&1) m = parent[j][m];
}
if(n==m) return n;
for(int j=19;j>=0;j--){
if(parent[j][n]!=parent[j][m]){
n = parent[j][n];
m = parent[j][m];
}
}
return parent[0][n];
}
int dep(int n){return depth[n];}
};
int Q,x,y,a,b;
int main(){
cin >> N;
vector<vector<int>> tree(N+1);
for(int i=0;i<N-1;i++){
cin >> x >> y;
tree[x].push_back(y);
tree[y].push_back(x);
}
LCA lca(N,1,tree);
cin >> Q;
for(int i=0;i<Q;i++){
cin >> a >> b;
int p = lca.lca(a,b);
cout << lca.dep(a)+lca.dep(b)+1-2*lca.dep(p) << endl;
}
}
Submission Info
Submission Time |
|
Task |
D - 閉路 |
User |
idsigma |
Language |
C++14 (GCC 5.4.1) |
Score |
100 |
Code Size |
1601 Byte |
Status |
AC |
Exec Time |
385 ms |
Memory |
23416 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 |
1 ms |
256 KB |
subtask0_sample02.txt |
AC |
1 ms |
256 KB |
subtask0_sample03.txt |
AC |
1 ms |
256 KB |
subtask1_01.txt |
AC |
81 ms |
22776 KB |
subtask1_02.txt |
AC |
81 ms |
22776 KB |
subtask1_03.txt |
AC |
1 ms |
256 KB |
subtask1_04.txt |
AC |
1 ms |
256 KB |
subtask1_05.txt |
AC |
2 ms |
384 KB |
subtask1_06.txt |
AC |
2 ms |
384 KB |
subtask1_07.txt |
AC |
91 ms |
19968 KB |
subtask1_08.txt |
AC |
94 ms |
19840 KB |
subtask1_09.txt |
AC |
94 ms |
19840 KB |
subtask1_10.txt |
AC |
94 ms |
19840 KB |
subtask1_11.txt |
AC |
92 ms |
19840 KB |
subtask1_12.txt |
AC |
94 ms |
19840 KB |
subtask2_01.txt |
AC |
291 ms |
23416 KB |
subtask2_02.txt |
AC |
294 ms |
23288 KB |
subtask2_03.txt |
AC |
193 ms |
384 KB |
subtask2_04.txt |
AC |
207 ms |
512 KB |
subtask2_05.txt |
AC |
214 ms |
768 KB |
subtask2_06.txt |
AC |
217 ms |
768 KB |
subtask2_07.txt |
AC |
367 ms |
20216 KB |
subtask2_08.txt |
AC |
372 ms |
20216 KB |
subtask2_09.txt |
AC |
377 ms |
20216 KB |
subtask2_10.txt |
AC |
373 ms |
20216 KB |
subtask2_11.txt |
AC |
381 ms |
20216 KB |
subtask2_12.txt |
AC |
385 ms |
20216 KB |