Submission #799669

#TimeUsernameProblemLanguageResultExecution timeMemory
799669GusterGoose27Drawing (CEOI22_drawing)C++17
100 / 100
162 ms31332 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; struct point { int a, b; point() {} point(int a, int b) : a(a), b(b) {} }; ll operator*(point a, point b) { return a.a*b.b-a.b*b.a; } point operator-(point a, point b) { return point(a.a-b.a, a.b-b.b); } point base; bool operator<(point a, point b) { return (a-base)*(b-base) > 0; } typedef pair<int, int> pii; typedef pair<point, int> ppi; const int MAXN = 2e5+5; int n; ppi points[MAXN]; vector<int> edges[MAXN]; int nxt = 0; int ans[MAXN]; void dfs(int cur, int p = -1) { ans[points[nxt++].second] = cur+1; for (int e: edges[cur]) { if (e == p) continue; dfs(e, cur); } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; int lft = 0; for (int i = 0; i < n-1; i++) { int x, y; cin >> x >> y; x--; y--; edges[x].push_back(y); edges[y].push_back(x); } for (int i = 0; i < n; i++) { int x, y; cin >> x >> y; points[i] = ppi(point(x, y), i); if (pii(x, y) < pii(points[lft].first.a, points[lft].first.b)) lft = i; } swap(points[0], points[lft]); base = points[0].first; sort(points+1, points+n); dfs(0); for (int i = 0; i < n; i++) { if (i) cout << ' '; 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...