Flickyyy

B-B'6

Aug 30th, 2022
802
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define all(a) a.begin(), a.end()
  4. #define forn(i, a, b) for (ll i = a; i < b; i++)
  5. #define FAST ios_base::sync_with_stdio(false); cin.tie(nullptr)
  6. using ll = long long;
  7. vector< vector<int> > node;
  8. vector<bool> used;
  9. vector<int> cnt, ans, cnt_edges;
  10. int n, s;
  11. const int MOD = 1e9 + 7;
  12.  
  13. void dfs(int curr) {
  14.     used[curr] = true;
  15.     ans[curr] = max(s - cnt[curr], 0);
  16.     bool isfirst = true;
  17.     for (auto next : node[curr]) {
  18.         if (used[next]) continue;
  19.         if (isfirst)
  20.             cnt[next] = min(2, cnt[curr] + 1);
  21.         else
  22.             cnt[next] = cnt_edges[curr] + 1;
  23.         cnt_edges[next] += 1;
  24.         cnt_edges[curr] += 1;
  25.         dfs(next);
  26.         if (isfirst) isfirst = false;
  27.     }
  28. }
  29.  
  30. int main() {
  31.     FAST;
  32.     cin >> n >> s;
  33.     node.resize(n);
  34.     used.resize(n);
  35.     cnt_edges.resize(n);
  36.     cnt.resize(n);
  37.     ans.resize(n);
  38.     forn(i, 1, n) {
  39.         int u, v;
  40.         cin >> u >> v;
  41.         u--; v--;
  42.         node[u].push_back(v);
  43.         node[v].push_back(u);
  44.     }
  45.     dfs(0);
  46.     ll answer = 1;
  47.     for (auto e : ans) answer = (answer * e) % MOD;
  48.     //answer = (answer * cnk(n, count(all(ans), 0))) % MOD;
  49.     //I EXPECT THERE IS POSSIBLE ZEROES BUT IN THIS TASK IT WASN'T POSSIBLE LOL!
  50.     cout << answer << endl;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment