Submission #1593154
Source Code Expand
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include <unordered_map>
#include <set>
#include <climits>
using namespace std;
class LCA{
public:
vector<int> dep;
vector<vector<int>> par;
LCA(int N, vector<vector<int>> &G, int s) : dep(N), par(N){
vector<bool> isVisited(N, false);
isVisited[s] = true;
dfs1(N, G, isVisited, s, 0);
int maxdepth = *max_element(dep.begin(), dep.end());
int M = 1;
for(int fac=1;; fac*=2){
if(fac >= maxdepth) break;
M++;
}
for(int i=0; i<N; i++) par[i].resize(M);
par[s][0] = s;
fill(isVisited.begin(), isVisited.end(), false);
isVisited[s] = true;
dfs2(N, M, G, isVisited, s);
}
void dfs1(int N, vector<vector<int>> &G, vector<bool> &isVisited, int s, int d){
dep[s] = d;
for(int t : G[s]){
if(isVisited[t]) continue;
isVisited[t] = true;
dfs1(N, G, isVisited, t, d+1);
}
}
void dfs2(int N, int M, vector<vector<int>> &G, vector<bool> &isVisited, int s){
for(int i=1; i<M; i++)
par[s][i] = par[par[s][i-1]][i-1];
for(int t : G[s]){
if(isVisited[t]) continue;
isVisited[t] = true;
par[t][0] = s;
dfs2(N, M, G, isVisited, t);
}
}
int get(int u, int v){
int M = par[0].size();
if(dep[u] > dep[v]) swap(u, v);
int diff = dep[v] - dep[u];
vector<int> vec;
for(int i=0; i<M; i++)
if(diff & (1 << i)) vec.push_back(i);
reverse(vec.begin(), vec.end());
for(int x : vec)
v = par[v][x];
if(u == v) return u;
while(par[u][0] != par[v][0]){
for(int i=M-1; i>=0; i--){
if(par[u][i] != par[v][i]){
u = par[u][i];
v = par[v][i];
}
}
}
return par[u][0];
}
};
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
int N;
cin >> N;
vector<vector<int>> G(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);
}
LCA lca(N, G, 0);
int Q;
cin >> Q;
for(int i=0; i<Q; i++){
int a, b;
cin >> a >> b;
a--; b--;
int ab = lca.get(a, b);
int ans = lca.dep[a]+lca.dep[b]-2*lca.dep[ab]+1;
cout << ans << endl;
}
return 0;
}
Submission Info
Submission Time |
|
Task |
D - 閉路 |
User |
suzume |
Language |
C++14 (GCC 5.4.1) |
Score |
100 |
Code Size |
2682 Byte |
Status |
AC |
Exec Time |
315 ms |
Memory |
19712 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 |
49 ms |
19072 KB |
subtask1_02.txt |
AC |
50 ms |
19072 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 |
51 ms |
13312 KB |
subtask1_08.txt |
AC |
57 ms |
13184 KB |
subtask1_09.txt |
AC |
57 ms |
13184 KB |
subtask1_10.txt |
AC |
54 ms |
13184 KB |
subtask1_11.txt |
AC |
58 ms |
14720 KB |
subtask1_12.txt |
AC |
60 ms |
14720 KB |
subtask2_01.txt |
AC |
255 ms |
19712 KB |
subtask2_02.txt |
AC |
253 ms |
19712 KB |
subtask2_03.txt |
AC |
175 ms |
512 KB |
subtask2_04.txt |
AC |
179 ms |
512 KB |
subtask2_05.txt |
AC |
196 ms |
640 KB |
subtask2_06.txt |
AC |
203 ms |
768 KB |
subtask2_07.txt |
AC |
258 ms |
13568 KB |
subtask2_08.txt |
AC |
269 ms |
13568 KB |
subtask2_09.txt |
AC |
273 ms |
13568 KB |
subtask2_10.txt |
AC |
293 ms |
13568 KB |
subtask2_11.txt |
AC |
308 ms |
15104 KB |
subtask2_12.txt |
AC |
315 ms |
15104 KB |