Submission #1339648

#TimeUsernameProblemLanguageResultExecution timeMemory
1339648053thousandVillage (BOI20_village)C++20
50 / 100
85 ms14612 KiB
#include<bits/stdc++.h>
using namespace std;
	int a,b,c,d,e,f[100005],nd,mi,mis[100005],mas[100005];
	vector<int>v[100005];
	vector<int>dq;
int dfs1(int x,int y){
	int temp=0;
	f[x]=0;
	for(int i=0;i<v[x].size();i++){
		if(v[x][i]!=y) f[x]+=dfs1(v[x][i],x)+1;
	}
	return f[x];
}
int dfs2(int x,int y){
	for(int i=0;i<v[x].size();i++){
		if(f[v[x][i]]>a/2+a%2 and v[x][i]!=y){
			return dfs2(v[x][i],x);
		}
	}
	return x;
}
int dfs3(int x,int y,int z){
	int ret=0,temp=-1,car=0;
	if(x==nd){
		for(int i=0;i<v[x].size();i++){
			if(f[v[x][i]]>temp){
				temp=f[v[x][i]];
				car=v[x][i];
			}
		}
	ret+=2*z+dfs3(car,x,2);
	}
	for(int i=0;i<v[x].size();i++){
		if(v[x][i]!=y and v[x][i]!=car){
			ret+=z*2+dfs3(v[x][i],x,z+1);
		}
	}
	dq.push_back(x);
	return ret;
}
bool dfs4(int x,int y){
	int temp=0,fi=0,pi=0;
	for(int i=0;i<v[x].size();i++){
		if(v[x][i]!=y){
			if(dfs4(v[x][i],x)){
				temp++;
				if(fi==0) fi=v[x][i],pi=v[x][i];
				else{
					mis[pi]=v[x][i];
					pi=v[x][i];
				}
			}
		}
	}
	if(temp==0) return 1;
	else{
		mis[pi]=x;
		mis[x]=fi;
		mi+=temp*2;
		return 0;
	}
}
int main(){
	cin>>a;
	for(int i=0;i<a-1;i++){
		cin>>b>>c;
		v[b].push_back(c);
		v[c].push_back(b);
	}
	dfs1(1,0);
	nd=dfs2(1,0);
//	cout<<nd<<"\n";
	if(dfs4(nd,0)==1){
		mis[nd]=mis[v[nd][0]];
		mis[v[nd][0]]=nd;
		cout<<mi+2<<' ';
	}
	else cout<<mi<<' ';
	cout<<dfs3(nd,0,1)<<"\n";
	for(int i=1;i<=a;i++){
		cout<<mis[i]<<' ';
	}
	for(int i=0;i<a;i++){
		mas[dq[i]]=dq[(i+a/2)%a];
	}
	cout<<"\n";
	for(int i=1;i<=a;i++){
		cout<<mas[i]<<" ";
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...