Submission #230655
Source Code Expand
#include <iostream>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <cstdio>
#include <sstream>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <list>
#define INF 100000000
#define FOR(i, a, b) for (int i = (a); i < (b); i++)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef list<pii>::iterator lpite;
const double PI = acos(-1.0);
vector<int> G[100001];
int root = 0;
int parent[30][100001];
int depth[100001];
int N, Q;
void dfs(int v, int p, int d)
{
parent[0][v] = p;
depth[v] = d;
FOR(i, 0, G[v].size()) {
if (G[v][i] != p) dfs(G[v][i], v, d+1);
}
}
void init(int V)
{
dfs(root, -1, 0);
FOR(k, 0, 30-1) {
FOR(v, 0, 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(k, 0, 30-1) {
if ( (depth[v]-depth[u]) >> k & 1 ) {
v = parent[k][v];
}
}
if (u==v) return u;
for (int k = 30-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()
{
ios::sync_with_stdio(false);
cin >> N;
FOR(i,0,N-1){
int x,y;
cin >> x >> y;
x--, y--;
G[x].push_back(y);
G[y].push_back(x);
}
init(N);
cin >> Q;
while (Q--) {
int a,b;
cin >> a >> b;
a--, b--;
int p = lca(a, b);
cout << depth[a]+depth[b]-2*depth[p] + 1<< "\n";
}
return 0;
}
Submission Info
Submission Time |
|
Task |
D - 閉路 |
User |
soupe |
Language |
C++ (G++ 4.6.4) |
Score |
100 |
Code Size |
1592 Byte |
Status |
AC |
Exec Time |
636 ms |
Memory |
23080 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 |
3240 KB |
subtask0_sample02.txt |
AC |
30 ms |
3360 KB |
subtask0_sample03.txt |
AC |
30 ms |
3352 KB |
subtask1_01.txt |
AC |
115 ms |
23072 KB |
subtask1_02.txt |
AC |
114 ms |
23076 KB |
subtask1_03.txt |
AC |
28 ms |
3240 KB |
subtask1_04.txt |
AC |
29 ms |
3236 KB |
subtask1_05.txt |
AC |
30 ms |
3368 KB |
subtask1_06.txt |
AC |
29 ms |
3488 KB |
subtask1_07.txt |
AC |
125 ms |
18464 KB |
subtask1_08.txt |
AC |
129 ms |
18340 KB |
subtask1_09.txt |
AC |
129 ms |
18336 KB |
subtask1_10.txt |
AC |
130 ms |
18340 KB |
subtask1_11.txt |
AC |
138 ms |
18332 KB |
subtask1_12.txt |
AC |
129 ms |
18336 KB |
subtask2_01.txt |
AC |
380 ms |
23064 KB |
subtask2_02.txt |
AC |
389 ms |
23080 KB |
subtask2_03.txt |
AC |
281 ms |
3228 KB |
subtask2_04.txt |
AC |
297 ms |
3232 KB |
subtask2_05.txt |
AC |
334 ms |
3484 KB |
subtask2_06.txt |
AC |
329 ms |
3364 KB |
subtask2_07.txt |
AC |
602 ms |
18456 KB |
subtask2_08.txt |
AC |
610 ms |
18344 KB |
subtask2_09.txt |
AC |
614 ms |
18336 KB |
subtask2_10.txt |
AC |
636 ms |
18340 KB |
subtask2_11.txt |
AC |
629 ms |
18344 KB |
subtask2_12.txt |
AC |
632 ms |
18336 KB |