#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void find_mn(vector<vector<int>>& adj, ll& mn,
vector<int>& res) {
int n = adj.size();
iota(begin(res), end(res), 0);
queue<int> q;
vector<int> d(n, -1);
d[0] = 0;
q.push(0);
while (!q.empty()) {
int v = q.front();
q.pop();
for (auto& u : adj[v]) {
if (d[u] != -1) continue;
d[u] = d[v] + 1;
q.push(u);
}
}
vector<int> deg(n);
for (int i = 0; i < n; ++i) {
deg[i] = adj[i].size();
if (adj[i].size() == 1) {
q.push(i);
}
}
while (!q.empty()) {
int v = q.front();
q.pop();
for (auto& u : adj[v]) {
deg[v]--;
deg[u]--;
if (res[u] == u && res[v] == v) {
mn += 2;
swap(res[u], res[v]);
}
if (deg[u] == 1) {
q.push(u);
}
}
}
for (int i = 0; i < n; ++i) {
if (res[i] == i) {
bool swapped = false;
for (auto& g : adj[i]) {
if (res[g] == g) {
swap(res[i], res[g]);
mn += 2;
swapped = true;
break;
}
}
if (!swapped) {
int g = adj[i][0];
swap(res[i], res[g]);
mn += 2;
}
}
}
}
void dfs(vector<vector<int>>& adj, ll& res, vector<int>& sz,
vector<int>& ord, int& t, int v, int p, vector<int>& tin) {
tin[v] = t;
ord[t++] = v;
for (auto& u : adj[v]) {
if (u == p) continue;
dfs(adj, res, sz, ord, t, u, v, tin);
sz[v] += sz[u];
}
res += 2 * min(sz[v], (int)adj.size() - sz[v]);
}
void find_mx(vector<vector<int>>& adj, ll& res,
vector<int>& mx) {
int n = adj.size();
vector<int> sz(n, 1);
vector<int> ord(n + 1);
vector<int> tin(n);
int t = 1;
dfs(adj, res, sz, ord, t, 0, -1, tin);
for (int i = 0; i < n; ++i) {
mx[i] = ord[(tin[i] + n / 2 - 1) % n + 1];
}
}
int main() {
int n;
cin >> n;
vector<vector<int>> adj(n);
for (int i = 1; i < n; ++i) {
int a, b;
cin >> a >> b;
--a; --b;
adj[a].push_back(b);
adj[b].push_back(a);
}
vector<int> mn(n, -1), mx(n, -1);
ll resmn = 0;
find_mn(adj, resmn, mn);
ll resmx = 0;
find_mx(adj, resmx, mx);
cout << resmn << " " << resmx << endl;
for (auto& u : mn) {
cout << u + 1 << " ";
}
cout << "\n";
for (auto& u : mx) {
cout << u + 1 << " ";
}
cout << "\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |