Submission #1190205

#TimeUsernameProblemLanguageResultExecution timeMemory
1190205UnforgettableplDrawing (CEOI22_drawing)C++20
100 / 100
188 ms39144 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long


int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int N;
    cin >> N;
    vector<vector<int>> adj(N+1);
    for(int i=1;i<N;i++){
        int u,v;cin>>u>>v;
        adj[u].emplace_back(v);
        adj[v].emplace_back(u);
    }
    int root = -1;
    for(int i=1;i<=N;i++)if(adj[i].size()==1)root=i;
    vector<tuple<int,int,int>> points(N);
    {
        int x=0;
        for(auto&[a,b,c]:points){cin>>a>>b;c=++x;}
    }
    auto minima = *min_element(points.begin(),points.end());
    int ycap = get<1>(minima);
    auto maxima = *max_element(points.begin(),points.end());
    int xmaxi = get<0>(maxima);
    {
        vector<tuple<int,int,int>> upper,lower;
        for(auto&[a,b,c]:points)
            if(b>=ycap and a!=xmaxi)
                upper.emplace_back(a,b,c);
            else
                lower.emplace_back(a,b,c);
        sort(upper.begin(),upper.end());
        sort(lower.rbegin(),lower.rend());
        for(auto&i:lower)upper.emplace_back(i);
        swap(upper,points);
    }
    vector<int> subsize(N+1);
    vector<int> ans(N+1);
    {
        function<int(int,int,int)> dfs = [&](int x,int p,int idx){
            ans[get<2>(points[idx])]=x;
            int alotspace = idx+1;
            for(int&i:adj[x])if(i!=p){
                alotspace = dfs(i,x,alotspace);
            }
            return alotspace;
        };
        assert(dfs(root,0,0)==N);
    }
    for(int i=1;i<=N;i++)cout<<ans[i]<<' ';
    cout << '\n';
}
#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...