#include #define rep(i,n) for(int i = 0; i < (n); ++i) using namespace std; typedef long long ll; typedef pair pii; typedef vector vii; vector points; vector> g; vector as; vector subt; vector swipe(int act, int from, vector s) { vector> temp; double dx = points[act].first - points[from].first; double dy = points[act].second - points[from].second; for (int i = 0; i < s.size(); i++) { double dx1 = points[s[i]].first - points[act].first; double dy1 = points[s[i]].second - points[act].second; double ss = (dx*dx1 + dy*dy1)/(sqrt(dx*dx+dy*dy)*sqrt(dx1*dx1+dy1*dy1)); temp.push_back({ss,s[i]}); } sort(temp.rbegin(), temp.rend()); vector res; for (auto num : temp) { res.push_back(num.second); } return res; } //reference?? void recur(int act, int from, vector s) { vector ord = swipe(as[act], from, s); //cout << "SWIPE OK" << act << " " << from << endl; int pos = 0; for (auto syn : g[act]) { if (syn != from) { as[syn] = ord[pos]; vector nset; for (int i = pos+1; i < pos+subt[syn]; ++i) { //+1-1?? nset.push_back(ord[i]); } pos += subt[syn]; recur(syn, act, nset); } } } void dfs(int v, int from) { int cnt = 0; for (auto syn : g[v]) { if (syn != from) { dfs(syn, v); cnt += subt[syn]; } } subt[v] = cnt + 1; } int main() { int vecn; cin >> vecn; g.resize(vecn + 1); points.resize(vecn + 1); as.resize(vecn); subt.resize(vecn+1); vector> edg; for (int i = 0; i < vecn - 1; i++) { int a,b; cin >> a >> b; g[a].push_back(b); g[b].push_back(a); edg.push_back({a,b}); } int minid = 1; int minval = 1e9 + 10; for (int i = 0; i < vecn; i++) { double a,b; cin >> a >> b; if (a < minval) { minval = a; minid = i; } points[i] = {a,b}; } //cout << "INPUT OK " << endl; points[vecn] = {minval, points[minid].second - 1}; //precalc dfs(0, -1); //cout << "DFFS OK" << endl; as[0] = minid; vector newst; for (int i = 0; i < points.size(); i++) { if (i != minid) { newst.push_back(i); } } //cout << "PREREC" << endl; recur(0, vecn, newst); //cout << "REC" << endl; for (auto edge : edg) { cout << as[edge.first] << " " << as[edge.second] << endl; } return 0; }