Submission #230649
Source Code Expand
#include <iostream>
#include <complex>
#include <sstream>
#include <string>
#include <algorithm>
#include <deque>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <vector>
#include <set>
#include <limits>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;
#define REP(i, j) for(int i = 0; i < (int)(j); ++i)
#define FOR(i, j, k) for(int i = (int)(j); i < (int)(k); ++i)
#define SORT(v) sort((v).begin(), (v).end())
#define REVERSE(v) reverse((v).begin(), (v).end())
#define P pair<int, int>
const int MAX_V = 100010;
const int MAX_LOG_V = 17;
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];
}
int dist[MAX_V];
void make_dist(int n, int now, int d){
dist[now] = d;
REP(i, G[now].size()){
int next = G[now][i];
if(dist[next] != -1) continue;
make_dist(n, next, d + 1);
}
}
int main(){
memset(dist, -1, sizeof(dist));
int N; cin >>N;
REP(i, N - 1){
int a, b; cin >>a >>b;
G[a - 1].push_back(b - 1);
G[b - 1].push_back(a - 1);
}
make_dist(N, 0, 0);
init(N);
int Q; cin >>Q;
REP(i, Q){
int a, b; cin >>a >>b;
int p = lca(a - 1, b - 1);
//cout <<a - 1 <<", " <<b - 1 <<", " <<p <<endl;
cout <<(dist[a - 1] + dist[b - 1] - 2 * dist[p]) + 1 <<endl;
}
return 0;
}
Submission Info
Submission Time |
|
Task |
D - 閉路 |
User |
alotofwe |
Language |
C++ (G++ 4.6.4) |
Score |
100 |
Code Size |
2189 Byte |
Status |
AC |
Exec Time |
778 ms |
Memory |
18348 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 |
30 ms |
3484 KB |
subtask0_sample02.txt |
AC |
29 ms |
3620 KB |
subtask0_sample03.txt |
AC |
29 ms |
3552 KB |
subtask1_01.txt |
AC |
183 ms |
18344 KB |
subtask1_02.txt |
AC |
182 ms |
18348 KB |
subtask1_03.txt |
AC |
29 ms |
3484 KB |
subtask1_04.txt |
AC |
28 ms |
3492 KB |
subtask1_05.txt |
AC |
30 ms |
3616 KB |
subtask1_06.txt |
AC |
30 ms |
3680 KB |
subtask1_07.txt |
AC |
192 ms |
13728 KB |
subtask1_08.txt |
AC |
195 ms |
13736 KB |
subtask1_09.txt |
AC |
197 ms |
13608 KB |
subtask1_10.txt |
AC |
197 ms |
13740 KB |
subtask1_11.txt |
AC |
197 ms |
13736 KB |
subtask1_12.txt |
AC |
197 ms |
13732 KB |
subtask2_01.txt |
AC |
640 ms |
18344 KB |
subtask2_02.txt |
AC |
596 ms |
18336 KB |
subtask2_03.txt |
AC |
328 ms |
3488 KB |
subtask2_04.txt |
AC |
363 ms |
3620 KB |
subtask2_05.txt |
AC |
397 ms |
3616 KB |
subtask2_06.txt |
AC |
464 ms |
3660 KB |
subtask2_07.txt |
AC |
702 ms |
13728 KB |
subtask2_08.txt |
AC |
751 ms |
13732 KB |
subtask2_09.txt |
AC |
778 ms |
13596 KB |
subtask2_10.txt |
AC |
713 ms |
13728 KB |
subtask2_11.txt |
AC |
752 ms |
13736 KB |
subtask2_12.txt |
AC |
722 ms |
13732 KB |