Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.04 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. void redirect(string filename) {
  6.     freopen((filename + ".out").c_str(), "w", stdout);
  7.     freopen((filename + ".in").c_str(), "r", stdin);
  8. }
  9.  
  10. const int N = 1e5 + 10;
  11. vector<int> g[N];
  12. vector<int> t[N];
  13. int ecount[N];
  14.  
  15. void build_tree(int curr, int prev) {
  16.     for (int next: g[curr]) {
  17.         if (next != prev) {
  18.             t[curr].emplace_back(next);
  19.             build_tree(next, curr);
  20.         }
  21.     }
  22.     if (curr != 0) {
  23.         ecount[prev] += ecount[curr] + 1;
  24.     }
  25. }
  26.  
  27. int dvcount[N];
  28.  
  29. bool f(int curr, int k) {
  30.     for (int child: t[curr]) {
  31.         if (!f(child, k)) {
  32.             return false;
  33.         }
  34.     }
  35.     for (int child: t[curr]) {
  36.         dvcount[ecount[child] % k]++;
  37.     }
  38.     if (ecount[curr] % k != 0) {
  39.         if (dvcount[(ecount[curr] % k) - 1]) {
  40.             --dvcount[(ecount[curr] % k) - 1];
  41.         } else {
  42.             for (int i: t[curr]) {
  43.                 dvcount[ecount[i] % k] = 0;
  44.             }
  45.             return false;
  46.         }
  47.     }
  48.     for (int child: t[curr]) {
  49.         int dv = ecount[child] % k;
  50.         if (dvcount[dv] && dv != k - 1) {
  51.             --dvcount[dv];
  52.             int cdv = k - (ecount[child] % k) - 2;
  53.             if (dvcount[cdv]) {
  54.                 --dvcount[cdv];
  55.             } else {
  56.                 for (int i: t[curr]) {
  57.                     dvcount[ecount[i] % k] = 0;
  58.                 }
  59.                 return false;
  60.             }
  61.         }
  62.     }
  63.     for (int i: t[curr]) {
  64.         dvcount[ecount[i] % k] = 0;
  65.     }
  66.     return true;
  67. }
  68.  
  69. int main() {
  70.     redirect("deleg");
  71.     ios::sync_with_stdio(false);
  72.     int n;
  73.     cin >> n;
  74.     for (int i = 0; i < n - 1; ++i) {
  75.         int a, b;
  76.         cin >> a >> b;
  77.         --a, --b;
  78.         g[a].emplace_back(b);
  79.         g[b].emplace_back(a);
  80.     }
  81.     build_tree(0, 0);
  82.     for (int k = 1; k < n; ++k) {
  83.         if ((n - 1) % k == 0 && f(0, k)) {
  84.             cout << 1;
  85.         } else {
  86.             cout << 0;
  87.         }
  88.     }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement