niyaznigmatullin

Untitled

Mar 23rd, 2016
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.97 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. int const N = 1234567;
  4.  
  5. int banned[N], ans[N];
  6.  
  7. std::vector<int> edges[N];
  8. std::vector<int> z;
  9.  
  10. void dfs(int v, int pv) {
  11.   z.push_back(v);
  12.   for (int i : edges[v]) {
  13.     if (banned[i] || i == pv) continue;
  14.     dfs(i, v);
  15.   }
  16. }
  17.  
  18. std::mt19937 rnd(std::chrono::system_clock::now().time_since_epoch().count());
  19.  
  20. void go(int v, int pp) {
  21.   z.clear();
  22.   dfs(v, -1);
  23.   v = z[(int) (rnd() % z.size())];
  24.   ans[v] = pp;
  25.   banned[v] = true;
  26.   for (int i : edges[v]) {
  27.     if (banned[i]) continue;
  28.     go(i, v);
  29.   }
  30. }
  31.  
  32. int main() {
  33.   freopen("decomposition.in", "r", stdin);
  34.   freopen("decomposition.out", "w", stdout);
  35.   int n;
  36.   scanf("%d", &n);
  37.   for (int i = 0; i + 1 < n; i++) {
  38.     int v, u;
  39.     scanf("%d%d", &v, &u);
  40.     --v;
  41.     --u;
  42.     edges[v].push_back(u);
  43.     edges[u].push_back(v);
  44.   }
  45.   go(0, -1);
  46.   for (int i = 0; i < n; i++) {
  47.     if (i > 0) putchar(' ');
  48.     printf("%d", ans[i] + 1);
  49.   }
  50.   puts("");
  51. }
Advertisement
Add Comment
Please, Sign In to add comment