Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using ll = long long;
- using ld = long double;
- using ull = unsigned long long;
- constexpr bool typetest = 0;
- constexpr int N = 1e3 + 5;
- int n, k, a, b, cnt[N];
- ll dp[N][N][5], ans(0);
- vector<int> adj[N];
- void Read()
- {
- cin >> n >> k >> a >> b;
- for (int i = 1; i < n; ++i)
- {
- int u, v;
- cin >> u >> v;
- adj[u].emplace_back(v);
- adj[v].emplace_back(u);
- }
- }
- void dfs(int v, int p)
- {
- dp[v][0][0] = dp[v][0][1] = 1;
- cnt[v] = 1;
- for (auto i : adj[v])
- if (i != p)
- {
- dfs(i, v);
- cnt[v] += cnt[i];
- for (int h = k; h; --h)
- for (int l = 1; l <= h; ++l)
- for (int j = 1; j <= cnt[v]; ++j)
- for (int t = 0; t < j && t <= cnt[i]; ++t)
- dp[v][j][h] += dp[v][j - t - 1][h - l] * dp[i][t][l];
- for (int j = a; j <= b; ++j)
- ans -= dp[i][j - 1][k];
- }
- for (int j = a; j <= b; ++j)
- ans += dp[v][j][k];
- /*cout << v << ":\n";
- for (int l = 0; l <= k; ++l)
- for (int j = 0; j <= n; ++j)
- cout << dp[v][j][l] << (j == n ? "\n" : " ");
- */
- }
- void Solve()
- {
- dfs(1, 1);
- cout << ans;
- }
- int32_t main()
- {
- ios::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- int t(1);
- if (typetest)
- cin >> t;
- for (int _ = 1; _ <= t; ++_)
- {
- Read();
- Solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement