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
AC × 3
AC × 12
AC × 27
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