Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- int const N = 1234567;
- int banned[N], ans[N];
- std::vector<int> edges[N];
- std::vector<int> z;
- void dfs(int v, int pv) {
- z.push_back(v);
- for (int i : edges[v]) {
- if (banned[i] || i == pv) continue;
- dfs(i, v);
- }
- }
- std::mt19937 rnd(std::chrono::system_clock::now().time_since_epoch().count());
- void go(int v, int pp) {
- z.clear();
- dfs(v, -1);
- v = z[(int) (rnd() % z.size())];
- ans[v] = pp;
- banned[v] = true;
- for (int i : edges[v]) {
- if (banned[i]) continue;
- go(i, v);
- }
- }
- int main() {
- freopen("decomposition.in", "r", stdin);
- freopen("decomposition.out", "w", stdout);
- int n;
- scanf("%d", &n);
- for (int i = 0; i + 1 < n; i++) {
- int v, u;
- scanf("%d%d", &v, &u);
- --v;
- --u;
- edges[v].push_back(u);
- edges[u].push_back(v);
- }
- go(0, -1);
- for (int i = 0; i < n; i++) {
- if (i > 0) putchar(' ');
- printf("%d", ans[i] + 1);
- }
- puts("");
- }
Advertisement
Add Comment
Please, Sign In to add comment