Submission #239922
Source Code Expand
#include <iostream>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <algorithm>
#include <string>
#include <complex>
#include <cstdio>
using namespace std;
#define REP(i,p,n) for(int i=p;i<n;++i)
#define rep(i,n) REP(i,0,n)
typedef long long int ll;
typedef pair<int,int> pii;
typedef complex<double> point;
const int MAXN = 100001;
const int MAXM = 20;
vector<int> G[MAXN];
int N,Q;
int fs[MAXM][MAXN];
vector<int> ds(MAXN,-2);
void dfs(int index,int parent,int depth)
{
ds[index] = depth;
fs[0][index] = parent;
rep(i,G[index].size()) if(ds[G[index][i]]==-2)
{
dfs(G[index][i],index,depth+1);
}
}
int lca(int a,int b)
{
if(ds[a]!=ds[b]) // 深さを揃える
{
bool ab = ds[a]<ds[b];
int len = ab ? ds[b]-ds[a] : ds[a]-ds[b];
int c = ab ? b : a;
rep(i,MAXM){ if((len>>i)&1){ c = fs[i][c]; } }
a = ab ? a : c;
b = ab ? c : b;
}
if( a == b ){ return a; }
for(int i=MAXM-1;i>=0;--i) if(fs[i][a]!=fs[i][b])
{
a = fs[i][a];
b = fs[i][b];
}
return fs[0][a];
}
int main()
{
cin>>N;
rep(i,N-1)
{
int x,y;
cin>>x>>y;
--x;
--y;
G[x].push_back(y);
G[y].push_back(x);
}
dfs(0,-1,0);
rep(i,MAXM-1) rep(j,N)
{
fs[i+1][j] = fs[i][j]==-1 ? -1 : fs[i][fs[i][j]];
}
cin>>Q;
rep(i,Q)
{
int a,b;
cin>>a>>b;
--a;
--b;
cout << (ds[a]+ds[b]-2*ds[lca(a,b)]+1) << endl;
}
return 0;
}
Submission Info
Submission Time |
|
Task |
D - 閉路 |
User |
mitsuchie |
Language |
C++ (G++ 4.6.4) |
Score |
100 |
Code Size |
1467 Byte |
Status |
AC |
Exec Time |
730 ms |
Memory |
19108 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 |
3616 KB |
subtask0_sample02.txt |
AC |
28 ms |
3496 KB |
subtask0_sample03.txt |
AC |
28 ms |
3740 KB |
subtask1_01.txt |
AC |
179 ms |
19108 KB |
subtask1_02.txt |
AC |
181 ms |
19100 KB |
subtask1_03.txt |
AC |
31 ms |
3744 KB |
subtask1_04.txt |
AC |
31 ms |
3488 KB |
subtask1_05.txt |
AC |
33 ms |
3616 KB |
subtask1_06.txt |
AC |
32 ms |
3616 KB |
subtask1_07.txt |
AC |
188 ms |
14496 KB |
subtask1_08.txt |
AC |
194 ms |
14500 KB |
subtask1_09.txt |
AC |
191 ms |
14504 KB |
subtask1_10.txt |
AC |
202 ms |
14504 KB |
subtask1_11.txt |
AC |
193 ms |
14480 KB |
subtask1_12.txt |
AC |
191 ms |
14500 KB |
subtask2_01.txt |
AC |
561 ms |
19044 KB |
subtask2_02.txt |
AC |
548 ms |
19108 KB |
subtask2_03.txt |
AC |
343 ms |
3616 KB |
subtask2_04.txt |
AC |
397 ms |
3612 KB |
subtask2_05.txt |
AC |
423 ms |
3620 KB |
subtask2_06.txt |
AC |
426 ms |
3612 KB |
subtask2_07.txt |
AC |
690 ms |
14504 KB |
subtask2_08.txt |
AC |
706 ms |
14504 KB |
subtask2_09.txt |
AC |
703 ms |
14508 KB |
subtask2_10.txt |
AC |
716 ms |
14492 KB |
subtask2_11.txt |
AC |
730 ms |
14500 KB |
subtask2_12.txt |
AC |
719 ms |
14496 KB |