제출 #1328563

#제출 시각아이디문제언어결과실행 시간메모리
1328563PieArmyDrawing (CEOI22_drawing)C++20
10 / 100
77 ms14420 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 t=0;
int per[200023],sira[200023];
vector<int>a,b,c,d;

void dfs(int pos,int par){
	per[sira[++t]]=pos;
	for(int x:komsu[pos]){
		if(x==par)continue;
		dfs(x,pos);
	}
}

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);
	}
	for(int i=1;i<=n;i++){
		cin>>arr[i].fr>>arr[i].sc;
		per[i]=i;
	}
	sort(per+1,per+n+1,[&](const int &x,const int &y){
		return arr[x]<arr[y];
	});
	a.pb(per[1]);
	d.pb(per[1]);
	for(int i=2;i<=n;i++){
		if(arr[per[i]].sc>arr[a.back()].sc)a.pb(per[i]);
		if(arr[per[i]].sc<arr[d.back()].sc)d.pb(per[i]);
	}
	b.pb(per[n]);
	c.pb(per[n]);
	for(int i=n-1;i>=1;i--){
		if(arr[per[i]].sc>=arr[b.back()].sc)b.pb(per[i]);
		if(arr[per[i]].sc<=arr[c.back()].sc)c.pb(per[i]);
	}
	for(int i=1;i<a.size()-1;i++){
		sira[++t]=a[i];
	}
	for(int i=b.size()-1;i>=0;i--){
		sira[++t]=b[i];
	}
	for(int i=1;i<c.size()-1;i++){
		sira[++t]=c[i];
	}
	for(int i=d.size()-1;i>=0;i--){
		sira[++t]=d[i];
	}
	t=0;
	dfs(1,1);
	for(int i=1;i<=n;i++){
		cout<<per[i]<<" ";
	}
	cout<<endl;
}
#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...