Submission #1328658

#TimeUsernameProblemLanguageResultExecution timeMemory
1328658PieArmyDrawing (CEOI22_drawing)C++20
30 / 100
1616 ms540464 KiB
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)

int n;
vector<int>komsu[200023];
pair<int,int>arr[200023];
int par[200023],sub[200023];
int ans[200023];

void f(int pos,vector<int>v){
	sort(v.begin(),v.end(),[&](const int &x,const int &y){
		return arr[x]<arr[y];
	});
	int p=0,t=0;
	for(int x:komsu[pos]){
		if(x==par[pos])continue;
		vector<int>z;
		t+=sub[x]-1;
		while(p<t){
			z.pb(v[p]);
			p++;
		}
		ans[v[p]]=x;
		p++;
		t++;
		f(x,z);
	}
}

void dfs(int pos){
	sub[pos]=1;
	for(int x:komsu[pos]){
		if(x==par[pos])continue;
		par[x]=pos;
		dfs(x);
		sub[pos]+=sub[x];
	}
}

signed main(){
	ios_base::sync_with_stdio(23^23);cin.tie(0);
	cin>>n;
	for(int i=1;i<n;i++){
		int x,y;cin>>x>>y;
		komsu[x].pb(y);
		komsu[y].pb(x);
	}
	int root=1;
	for(int i=1;i<=n;i++){
		cin>>arr[i].fr>>arr[i].sc;
		if(arr[i]<arr[root])root=i;
	}
	par[1]=1;
	dfs(1);
	vector<int>v;
	for(int i=1;i<=n;i++){
		if(i==root)continue;
		v.pb(i);
	}
	ans[root]=1;
	f(1,v);
	for(int i=1;i<=n;i++){
		cout<<ans[i]<<" ";
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...