Submission #5896934


Source Code Expand

#include <iostream>
#include <vector>
using namespace std;
int N;

class LCA{
private:
	vector<vector<int>> v;
	vector<vector<int>> parent;
	vector<int> depth;
//	int parent[21][100010];
//	int depth[100010] = {};
	void dfs(int n,int m,int d){
		parent[0][n] = m;
		depth[n] = d;
		for(auto x:v[n]){
			if(x!=m) dfs(x,n,d+1);
		}
	}
public:
	LCA(int N,int root,vector<vector<int>>& tree){
		v = tree;
		parent = vector<vector<int>>(21,vector<int>(N+1,0));
		depth = vector<int>(N+1,0);
		dfs(root,-1,0);
		for(int j=0;j+1<20;j++){
			for(int i=1;i<=N;i++){
				if(parent[j][i]<0) parent[j+1][i] = -1;
				else parent[j+1][i] = parent[j][parent[j][i]];
			}
		}
	}
	void init(int N,int root){
		dfs(root,-1,0);
		for(int j=0;j+1<20;j++){
			for(int i=1;i<=N;i++){
				if(parent[j][i]<0) parent[j+1][i] = -1;
				else parent[j+1][i] = parent[j][parent[j][i]];
			}
		}
	}
	int lca(int n,int m){
		if(depth[n]>depth[m]) swap(n,m);
		for(int j=0;j<20;j++){
			if((depth[m]-depth[n]) >> j&1) m = parent[j][m];
		}
		if(n==m) return n;
		for(int j=19;j>=0;j--){
			if(parent[j][n]!=parent[j][m]){
				n = parent[j][n];
				m = parent[j][m];
			}
		}
		return parent[0][n];
	}
	int dep(int n){return depth[n];}
};
int Q,x,y,a,b;

int main(){
	cin >> N;
	vector<vector<int>> tree(N+1);
	for(int i=0;i<N-1;i++){
		cin >> x >> y;
		tree[x].push_back(y);
		tree[y].push_back(x);
	}
	LCA lca(N,1,tree);
	cin >> Q;
	for(int i=0;i<Q;i++){
		cin >> a >> b;
		int p = lca.lca(a,b);
		cout << lca.dep(a)+lca.dep(b)+1-2*lca.dep(p) << endl;	
	}
}

Submission Info

Submission Time
Task D - 閉路
User idsigma
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1601 Byte
Status AC
Exec Time 385 ms
Memory 23416 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 1 ms 256 KB
subtask0_sample02.txt AC 1 ms 256 KB
subtask0_sample03.txt AC 1 ms 256 KB
subtask1_01.txt AC 81 ms 22776 KB
subtask1_02.txt AC 81 ms 22776 KB
subtask1_03.txt AC 1 ms 256 KB
subtask1_04.txt AC 1 ms 256 KB
subtask1_05.txt AC 2 ms 384 KB
subtask1_06.txt AC 2 ms 384 KB
subtask1_07.txt AC 91 ms 19968 KB
subtask1_08.txt AC 94 ms 19840 KB
subtask1_09.txt AC 94 ms 19840 KB
subtask1_10.txt AC 94 ms 19840 KB
subtask1_11.txt AC 92 ms 19840 KB
subtask1_12.txt AC 94 ms 19840 KB
subtask2_01.txt AC 291 ms 23416 KB
subtask2_02.txt AC 294 ms 23288 KB
subtask2_03.txt AC 193 ms 384 KB
subtask2_04.txt AC 207 ms 512 KB
subtask2_05.txt AC 214 ms 768 KB
subtask2_06.txt AC 217 ms 768 KB
subtask2_07.txt AC 367 ms 20216 KB
subtask2_08.txt AC 372 ms 20216 KB
subtask2_09.txt AC 377 ms 20216 KB
subtask2_10.txt AC 373 ms 20216 KB
subtask2_11.txt AC 381 ms 20216 KB
subtask2_12.txt AC 385 ms 20216 KB