Submission #2209883


Source Code Expand

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int pa[100005][20];//parent //place, 2^i parent
vector<int> path[100005];
vector<int> his;//history
bool used[100005];
int deep[100005];
int s[100005];


void make_tree(int t){
	int a;
	int i,j,k;
	used[t]=true;
	deep[t]=his.size();
	his.push_back(t);
	for(i=0;;i++){
		j=his.size()-(1<<i)-1;
		if(j<0)break;
		pa[t][i]=his[j];
	}
	for(i=0;i<path[t].size();i++){
		a=path[t][i];
		if(used[a])continue;
		make_tree(a);
	}
	his.pop_back();
}

int check(int a,int b){
	int i,j,k;
	int s=0;
	if(deep[a]<deep[b])swap(a,b);
	k=deep[a]-deep[b];
	for(i=0;k>0;i++){
		if((k&(1<<i))!=0){
			k-=(1<<i);
			a=pa[a][i];
		}
	}
	k=deep[a];
	for(j=0;k>=(1<<j);j++){}
	j--;
	for(i=j;i>=0;i--){
		if(pa[a][i]!=pa[b][i])a=pa[a][i],b=pa[b][i];
	}
	if(a==b)s=a;
	else s=pa[a][0];
	return s;
}

int main(){
	int n,m;
	int i,j,k;
	int a,b;
	memset(pa,-1,sizeof(pa));
	cin>>n;
	for(i=0;i<n-1;i++){
		cin>>a>>b;
		a--,b--;
		path[a].push_back(b);
		path[b].push_back(a);
	}
	make_tree(0);
	cin>>m;
	for(i=0;i<m;i++){
		cin>>a>>b;
		a--,b--;
		s[i]=deep[a]+deep[b]-2*deep[check(a,b)]+1;
	}
	for(i=0;i<m;i++){
		cout<<s[i]<<endl;
	}
	return 0;
}
	

Submission Info

Submission Time
Task D - 閉路
User moririn2528
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1296 Byte
Status AC
Exec Time 333 ms
Memory 18680 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 4 ms 10368 KB
subtask0_sample02.txt AC 4 ms 10368 KB
subtask0_sample03.txt AC 4 ms 10368 KB
subtask1_01.txt AC 88 ms 17656 KB
subtask1_02.txt AC 89 ms 17656 KB
subtask1_03.txt AC 4 ms 10368 KB
subtask1_04.txt AC 4 ms 10368 KB
subtask1_05.txt AC 5 ms 10496 KB
subtask1_06.txt AC 5 ms 10496 KB
subtask1_07.txt AC 99 ms 14080 KB
subtask1_08.txt AC 97 ms 14080 KB
subtask1_09.txt AC 97 ms 14080 KB
subtask1_10.txt AC 101 ms 14080 KB
subtask1_11.txt AC 98 ms 14080 KB
subtask1_12.txt AC 99 ms 14080 KB
subtask2_01.txt AC 299 ms 18680 KB
subtask2_02.txt AC 312 ms 18680 KB
subtask2_03.txt AC 191 ms 11008 KB
subtask2_04.txt AC 203 ms 11008 KB
subtask2_05.txt AC 218 ms 11136 KB
subtask2_06.txt AC 214 ms 11136 KB
subtask2_07.txt AC 331 ms 14848 KB
subtask2_08.txt AC 330 ms 14720 KB
subtask2_09.txt AC 331 ms 14720 KB
subtask2_10.txt AC 333 ms 14848 KB
subtask2_11.txt AC 332 ms 14848 KB
subtask2_12.txt AC 333 ms 14848 KB