博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 855C - Helga Hufflepuff's Cup
阅读量:7027 次
发布时间:2019-06-28

本文共 1577 字,大约阅读时间需要 5 分钟。

题意

要求构建一棵树,树上至多可以存在 \(x\) 个权值为 \(k\) 的重要点,且与重要点连边的点的权值必须小于 \(k\),问有多少种构树方案。

分析

树形DP。

\(dp[u][s][cnt]\),表示以 \(u\) 为根结点的子树,重要点的数目为 \(cnt\) 时的方案数,其中 \(s=0\) 表示 \(u\) 的权值小于 \(k\)\(s=1\) 表示 \(u\) 的权值等于 \(k\)\(s=2\) 表示 \(u\) 的权值大于 \(k\)

code

#include
using namespace std;typedef long long ll;const int MOD = 1e9 + 7;const int MAXN = 1e5 + 10;vector
G[MAXN];int n, m, k, x;int dp[MAXN][3][11];void dfs(int fa, int u) { dp[u][0][0] = k - 1; dp[u][1][1] = 1; dp[u][2][0] = m - k; for(auto v : G[u]) { if(v != fa) { dfs(u, v); int tmp[3][11] = {0}; for(int i = 0; i <= x; i++) { for(int j = i; j <= x; j++) { tmp[0][j] = (tmp[0][j] + (ll)dp[u][0][j - i] * ((dp[v][0][i] + dp[v][1][i]) % MOD + dp[v][2][i]) % MOD) % MOD; tmp[1][j] = (tmp[1][j] + (ll)dp[u][1][j - i] * dp[v][0][i] % MOD) % MOD; tmp[2][j] = (tmp[2][j] + (ll)dp[u][2][j - i] * (dp[v][0][i] + dp[v][2][i]) % MOD) % MOD; } } memcpy(dp[u], tmp, sizeof tmp); } }}int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for(int i = 0; i < n - 1; i++) { int u, v; cin >> u >> v; G[u].push_back(v); G[v].push_back(u); } cin >> k >> x; dfs(1, 1); int ans = 0; for(int i = 0; i < 3; i++) { for(int j = 0; j <= x; j++) { ans = (ans + dp[1][i][j]) % MOD; } } cout << ans << endl; return 0;}

转载于:https://www.cnblogs.com/ftae/p/7599206.html

你可能感兴趣的文章
Codeforces Beta Round #18 (Div. 2 Only) C. Stripe 前缀和
查看>>
【ALearning】第二章 Androidproject知识介绍
查看>>
JAVA实现AES的加密和解密算法
查看>>
makefile 学习一
查看>>
yii 验证码 CCaptcha的总结(转)
查看>>
oracle汉字占用字节长度
查看>>
python--条件判断和循环--3
查看>>
开发环境、生产环境、测试环境的基本理解和区别
查看>>
CSS布局:水平居中
查看>>
【HTTP】WireShark中获取Content-Encoding: gzip时的响应内容
查看>>
一些组织和个人网站
查看>>
二叉树应用进阶之折纸(二叉树的右根左遍历)
查看>>
运维相关开源项目
查看>>
Lua MD5加密字符串
查看>>
Heap &amp; Priority Queue
查看>>
RDA PQ工具使用 (Adi Analysis)
查看>>
LEETCODE
查看>>
织云Lite发布:详解包管理核心能力
查看>>
hadoop04---shell
查看>>
HDU 4419 Colourful Rectangle(线段树)
查看>>