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
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 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