Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define all(a) a.begin(), a.end()
- #define forn(i, a, b) for (ll i = a; i < b; i++)
- #define FAST ios_base::sync_with_stdio(false); cin.tie(nullptr)
- using ll = long long;
- vector< vector<int> > node;
- vector<bool> used;
- vector<int> cnt, ans, cnt_edges;
- int n, s;
- const int MOD = 1e9 + 7;
- void dfs(int curr) {
- used[curr] = true;
- ans[curr] = max(s - cnt[curr], 0);
- bool isfirst = true;
- for (auto next : node[curr]) {
- if (used[next]) continue;
- if (isfirst)
- cnt[next] = min(2, cnt[curr] + 1);
- else
- cnt[next] = cnt_edges[curr] + 1;
- cnt_edges[next] += 1;
- cnt_edges[curr] += 1;
- dfs(next);
- if (isfirst) isfirst = false;
- }
- }
- int main() {
- FAST;
- cin >> n >> s;
- node.resize(n);
- used.resize(n);
- cnt_edges.resize(n);
- cnt.resize(n);
- ans.resize(n);
- forn(i, 1, n) {
- int u, v;
- cin >> u >> v;
- u--; v--;
- node[u].push_back(v);
- node[v].push_back(u);
- }
- dfs(0);
- ll answer = 1;
- for (auto e : ans) answer = (answer * e) % MOD;
- //answer = (answer * cnk(n, count(all(ans), 0))) % MOD;
- //I EXPECT THERE IS POSSIBLE ZEROES BUT IN THIS TASK IT WASN'T POSSIBLE LOL!
- cout << answer << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment