题目

给定一棵树,你需要删去一些边(可以不删),使得剩下的图中每个点所在的连通块大小都\(\geq k\)。

求删边的方案数,对\(786433\)取模。两种方案不同,当且仅当存在一条边在一个方案中被删去,而在另外一个方案中没有被删去。


分析

设\(dp[x][k]\)表示以点\(x\)为根的子树中\(x\)所在的连通块大小为\(k\)的方案数

状态转移方程显然,每次都要计算断了一条边的贡献,当且仅当子节点所在的连通块大小不小于\(k\)

但是这样\(O(n^3)\)会T掉,考虑当中有很多冗余状态,那么记录子树大小,按照子树大小拼接,时间复杂度\(O(n^2)\)


代码

#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int N = 5011, mod = 786433;
struct node {
int y, next;
} e[N << 1];
int dp[N][N], son[N], f[N], ans, as[N], n, k = 1, m;
inline signed iut() {
rr int ans = 0;
rr char c = getchar();
while (!isdigit(c)) c = getchar();
while (isdigit(c)) ans = (ans << 3) + (ans << 1) + (c ^ 48), c = getchar();
return ans;
}
inline signed mo(int x, int y) { return x + y >= mod ? x + y - mod : x + y; }
inline void dfs(int x, int fa) {
dp[x][1] = son[x] = 1;
for (rr int i = as[x], s; i; i = e[i].next)
if (e[i].y != fa) {
dfs(e[i].y, x), son[x] += son[e[i].y], s = 0;
for (rr int j = 1; j <= son[x]; ++j) f[j] = 0;
for (rr int j = 1; j <= son[x] - son[e[i].y]; ++j)
for (rr int o = 1; o <= son[e[i].y]; ++o)
f[j + o] = mo(f[j + o], 1ll * dp[x][j] * dp[e[i].y][o] % mod);
for (rr int o = m; o <= son[e[i].y]; ++o) s += dp[e[i].y][o];
for (rr int j = 1; j <= son[x]; ++j) dp[x][j] = mo(1ll * dp[x][j] * s % mod, f[j]);
}
}
signed main() {
freopen("cut.in", "r", stdin);
freopen("cut.out", "w", stdout);
n = iut();
m = iut();
for (rr int i = 1; i < n; ++i) {
rr int x = iut(), y = iut();
e[++k] = (node){ y, as[x] }, as[x] = k;
e[++k] = (node){ x, as[y] }, as[y] = k;
}
dfs(1, 0);
for (rr int i = m; i <= son[1]; ++i) ans = mo(ans, dp[1][i]);
return !printf("%d", ans);
}

#树形dp#B 预算缩减的更多相关文章

  1. vijos 1313 金明的预算方案 树形DP

    描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今天一 ...

  2. 深探树形dp

    看到同学在写一道树形dp,好奇直接拿来写,发现很不简单. 如图,看上去是不是很像选课,没错这不是选课,升级版吧,多加了点东西罢了.简单却调了一晚上和一上午. 思路:很简单强联通分量+缩点+树形dp.直 ...

  3. 树形DP+(分组背包||二叉树,一般树,森林之间的转换)codevs 1378 选课

    codevs 1378 选课 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond  题目描述 Description 学校实行学分制.每门的必修课都有固定的学分 ...

  4. HDU 1561 The more, The Better【树形DP/有依赖的分组背包】

    ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先 ...

  5. [CF816E] Karen and Supermarket1 [树形dp]

    传送门 - > \(CF816E\) Karen and Supermarket 题意翻译 在回家的路上,凯伦决定到超市停下来买一些杂货. 她需要买很多东西,但因为她是学生,所以她的预算仍然很有 ...

  6. UVA 10859 Placing Lamppost 树形DP+二目标最优解的求解方案

    题意:给定一个无向,无环,无多重边,要求找出最少的若干点,使得,每条边之中至少有一个点上有街灯.在满足上述条件的时候将还需要满足让两个点被选择的边的数量尽量多. 题解: 对于如何求解最小的节点数目这点 ...

  7. poj3417 LCA + 树形dp

    Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4478   Accepted: 1292 Descripti ...

  8. COGS 2532. [HZOI 2016]树之美 树形dp

    可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...

  9. 【BZOJ-4726】Sabota? 树形DP

    4726: [POI2017]Sabota? Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 128  Solved ...

  10. 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)

    题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...

随机推荐

  1. CSDN的Markdown编辑器使用说明

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一 ...

  2. 多线程系列(十一) -浅析并发读写锁StampedLock

    一.摘要 在上一篇文章中,我们讲到了使用ReadWriteLock可以解决多线程同时读,但只有一个线程能写的问题. 如果继续深入的分析ReadWriteLock,从锁的角度分析,会发现它有一个潜在的问 ...

  3. 获取input[type="checkbox"]:checked 所在tr中特定元素

    1.要求如下  2.html源码 <div class="btn"> <button type="button" onclick=" ...

  4. 从0开始搭建开发环境 -实现servlet原生开发

    开发环境:  JDK1.8 + Servlet + Mysql 搭建项目 项目搭建参考博客 https://www.cnblogs.com/oyww-2027/p/15347137.html File ...

  5. redis同步锁的真实应用场景

    一.问题由来 现在正在做的小程序后台中,有一个功能叫做高光时刻,在操作高光时刻的时候,可能会有多个用户来同时想操作这个功能,可是在同一时间只能 有一个用户能够操作.刚开始做的时候,自己的做法是在red ...

  6. 3D模型+BI分析,打造全新的交互式3D可视化大屏开发方案

    背景介绍 在数字经济建设和数字化转型的浪潮中,数据可视化大屏已成为各行各业的必备工具.然而,传统的数据大屏往往以图表和指标为主,无法真实地反映复杂的物理世界和数据关系.为了解决这个问题,3D模型可视化 ...

  7. sentienl

    整合springboot Spring Cloud Alibaba Sentinel 下载 导入依赖 <dependency> <groupId>com.alibaba.clo ...

  8. live [lɪv , laɪv] 动词读lɪv 形容词读laɪv

    live [lɪv , laɪv] 动词读lɪv 形容词读laɪv live 英 [lɪv , laɪv] 美 [lɪv , laɪv] v. 居住;住;生存;(尤指在某时期)活着;(以某种方式)生活 ...

  9. vm 虚拟机总是蓝屏 移除打印机和声卡 移除这俩硬件 (大文件用飞秋传输)

    vm 虚拟机总是蓝屏 移除打印机和声卡 移除这俩硬件 (大文件用飞秋传输)

  10. 安装VMware——Unable to install all modules.See log /tmp/vmware-han/vmware-6098.log for detalls.(Exit code 1)的解决方法(模块加载失败)

    这是编译失败的原因在VM社区有这样一种解决方案,亲测有效,帮助我自己解决的麻烦,所有在这分享,希望能够帮助到小伙伴:不要被接下来的代码吓倒因为这是github上项目,所以要先在ubuntu上安装git ...