Submission #230711
Source Code Expand
#include <algorithm>
#include <functional>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <vector>
#include <list>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <bitset>
#include <climits>
#define all(c) (c).begin(), (c).end()
#define rep(i,n) for(int i=0;i<(n);i++)
#define pb(e) push_back(e)
#define mp(a, b) make_pair(a, b)
#define fr first
#define sc second
const int INF=100000000;
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
using namespace std;
typedef pair<int ,int > P;
typedef long long ll;
int N;
vector<int> G[100005];
int d[100005];
int root;
int parent[20][100005];
int depth[100005];
void dfs(int v,int p,int d) {
parent[0][v] = p;
depth[v] = d;
rep(i,G[v].size()) {
if(G[v][i] != p) dfs(G[v][i],v,d+1);
}
}
void init(int v) {
for(int k=0;k+1<20;k++) {
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);
rep(k,20) {
if((depth[v]-depth[u])>>k &1) {
v=parent[k][v];
}
}
if(u==v) return u;
for(int k=20-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() {
cin>>N;
int maxi = 0;
rep(i,N-1) {
int x,y;
cin>>x>>y;
G[x].pb(y);
G[y].pb(x);
root = x;
maxi=max(max(maxi,x),y);
}
root = maxi;
dfs(root,-1,0);
rep(i,maxi+1) init(i);
int Q;
cin>>Q;
rep(i,Q) {
int a,b;
cin>>a>>b;
int v=lca(a,b);
int ans = depth[a]+depth[b]-depth[v]*2+1;
//cout<<v<<endl;
//cout<<depth[a]<<","<<depth[b]<<","<<depth[v]<<endl;
cout<<ans<<endl;
}
return 0;
}
Submission Info
Submission Time |
|
Task |
D - 閉路 |
User |
odan |
Language |
C++ (G++ 4.6.4) |
Score |
0 |
Code Size |
2046 Byte |
Status |
WA |
Exec Time |
838 ms |
Memory |
19108 KB |
Judge Result
Set Name |
Sample |
Subtask1 |
Subtask2 |
Score / Max Score |
0 / 0 |
0 / 30 |
0 / 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 |
32 ms |
3232 KB |
subtask0_sample02.txt |
WA |
29 ms |
3192 KB |
subtask0_sample03.txt |
AC |
30 ms |
3168 KB |
subtask1_01.txt |
AC |
172 ms |
19092 KB |
subtask1_02.txt |
WA |
171 ms |
19108 KB |
subtask1_03.txt |
AC |
29 ms |
3168 KB |
subtask1_04.txt |
AC |
28 ms |
3232 KB |
subtask1_05.txt |
WA |
29 ms |
3296 KB |
subtask1_06.txt |
WA |
29 ms |
3356 KB |
subtask1_07.txt |
AC |
221 ms |
14504 KB |
subtask1_08.txt |
AC |
217 ms |
14504 KB |
subtask1_09.txt |
WA |
224 ms |
14496 KB |
subtask1_10.txt |
WA |
226 ms |
14492 KB |
subtask1_11.txt |
WA |
217 ms |
14500 KB |
subtask1_12.txt |
WA |
212 ms |
14500 KB |
subtask2_01.txt |
AC |
529 ms |
19104 KB |
subtask2_02.txt |
WA |
558 ms |
19108 KB |
subtask2_03.txt |
AC |
364 ms |
3236 KB |
subtask2_04.txt |
WA |
365 ms |
3356 KB |
subtask2_05.txt |
WA |
427 ms |
3240 KB |
subtask2_06.txt |
WA |
446 ms |
3356 KB |
subtask2_07.txt |
WA |
802 ms |
14500 KB |
subtask2_08.txt |
WA |
811 ms |
14504 KB |
subtask2_09.txt |
WA |
803 ms |
14500 KB |
subtask2_10.txt |
WA |
838 ms |
14480 KB |
subtask2_11.txt |
WA |
835 ms |
14492 KB |
subtask2_12.txt |
WA |
833 ms |
14504 KB |