[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=5314

[算法]

考虑dp , 用f[i][j][0 / 1][0 / 1]表示以i为根的子树中选了j个 , 是否选i , i是否被覆盖的方案数

树形背包进行合并 , 转移即可

时间复杂度 : O(NK)

[代码]

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int MAXN = 1e5 + ;
const int MAXK = ;
const int P = 1e9 + ; struct edge
{
int to , nxt;
} e[MAXN << ]; int n , K , tot;
int head[MAXN] , dp[MAXN][MAXK][][] , tmp[MAXK][][] , size[MAXN]; #define rint register int template <typename T> inline void chkmax(T &x,T y) { x = max(x,y); }
template <typename T> inline void chkmin(T &x,T y) { x = min(x,y); }
template <typename T> inline void read(T &x)
{
T f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
inline void addedge(int x , int y)
{
++tot;
e[tot] = (edge){y , head[x]};
head[x] = tot;
}
inline void update(int &x , int y)
{
x += y;
while (x >= P) x -= P;
}
inline void dfs(int u , int par)
{
size[u] = ;
dp[u][][][] = ;
dp[u][][][] = ;
for (rint i = head[u]; i; i = e[i].nxt)
{
int v = e[i].to;
if (v == par) continue;
dfs(v , u);
for (rint j = min(K , size[u] + size[v]); j >= ; --j)
{
tmp[j][][] = ;
tmp[j][][] = ;
tmp[j][][] = ;
tmp[j][][] = ;
}
for (rint j = ; j <= size[u] && j <= K; ++j)
{
for (rint k = ; k <= size[v] && j + k <= K; ++k)
{
if (dp[u][j][][])
{
update(tmp[j + k][][] , 1LL * dp[u][j][][] * dp[v][k][][] % P);
update(tmp[j + k][][] , 1LL * dp[u][j][][] * dp[v][k][][] % P);
update(tmp[j + k][][] , 1LL * dp[u][j][][] * dp[v][k][][] % P);
update(tmp[j + k][][] , 1LL * dp[u][j][][] * dp[v][k][][] % P);
}
if (dp[u][j][][])
{
update(tmp[j + k][][] , 1LL * dp[u][j][][] * dp[v][k][][] % P);
update(tmp[j + k][][] , 1LL * dp[u][j][][] * dp[v][k][][] % P);
update(tmp[j + k][][] , 1LL * dp[u][j][][] * dp[v][k][][] % P);
update(tmp[j + k][][] , 1LL * dp[u][j][][] * dp[v][k][][] % P);
}
if (dp[u][j][][])
{
update(tmp[j + k][][] , 1LL * dp[u][j][][] * dp[v][k][][] % P);
update(tmp[j + k][][] , 1LL * dp[u][j][][] * dp[v][k][][] % P);
}
if (dp[u][j][][])
{
update(tmp[j + k][][] , 1LL * dp[u][j][][] * dp[v][k][][] % P);
update(tmp[j + k][][] , 1LL * dp[u][j][][] * dp[v][k][][] % P);
}
}
}
size[u] += size[v];
for (int j = min(K , size[u]); j >= ; --j)
{
dp[u][j][][] = tmp[j][][];
dp[u][j][][] = tmp[j][][];
dp[u][j][][] = tmp[j][][];
dp[u][j][][] = tmp[j][][];
}
}
} int main()
{ read(n); read(K);
for (rint i = ; i < n; ++i)
{
int x , y;
read(x); read(y);
addedge(x , y);
addedge(y , x);
}
dfs( , );
printf("%d\n" , (dp[][K][][] + dp[][K][][]) % P); return ; }

[JSOI 2018] 潜入行动的更多相关文章

  1. [BZOJ5250][九省联考2018]秘密袭击(DP)

    5250: [2018多省省队联测]秘密袭击 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3  Solved: 0[Submit][Status][D ...

  2. JSOI部分题解

    JSOI部分题解 JSOI2018 战争 问题转化为给定你两个凸包\(\mathbb S,\mathbb T\),每次独立的询问将\(\mathbb T\)中的每个点移动一个向量,问\(\mathbb ...

  3. 2018. The Debut Album

    http://acm.timus.ru/problem.aspx?space=1&num=2018 真心爱过,怎么能彻底忘掉 题目大意: 长度为n的串,由1和2组成,连续的1不能超过a个,连续 ...

  4. Math.abs(~2018),掌握规律即可!

    Math.abs(~2018) 某前端群的入门问题长姿势了,一个简单的入门问题却引发了我的思考,深深的体会到自己在学习前端技术的同时忽略遗忘了一些计算机的基础知识. 对于 JS Math对象没什么可说 ...

  5. 潜入ICU的四逆汤

    制附子50克(先煎2小时).干姜15克.炙甘草10克.桂枝10克.上好肉桂10克(后下).煎取药液300毫升,分三次鼻饲.这是昨天我给A先生病危的父亲开的处方:四逆汤加肉桂.桂枝. 昨天上午的门诊到2 ...

  6. 2786: [JSOI]Word Query电子字典

    2786: [JSOI]Word Query电子字典 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3  Solved: 3[Submit][Statu ...

  7. 1819: [JSOI]Word Query电子字典

    1819: [JSOI]Word Query电子字典 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 729  Solved: 238[Submit][S ...

  8. 肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版

    肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版 下载链接: https://u253469.ctfile.com/fs/253469-229815828

  9. 2018年的UX设计师薪酬预测,你能拿多少?

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具.   一个经验丰富的设计师完全可以根据地区和专业来可以预期薪酬之间的差距,其中悬殊最高可达80K. 本 ...

随机推荐

  1. win10系统架构调用

    操作系统模型 操作系统有两种模式: 用户模式 内核模式 当用户模式调用系统服务时,CPU执行一个特殊的指令以切换到内核模式(Ring0),当系统服务调用完成时,操作系统切换回用户模式(Ring3).  ...

  2. Canvas中图片翻转的应用

    很多时候拿到的素材都是单方向的,需要将其手动翻转来达到需求,比如下面这张图片: 它是朝右边方向的,但还需要一张朝左边方向的,于是不得不打开PS将其翻转然后做成雪碧图.如果只是一张图片还好说,但通常情况 ...

  3. Dubbo(一)Dubbo资料

    这个资料绝对权威了:http://dubbo.io/user-guide/

  4. hdu2473 Junk-Mail Filter 并查集+删除节点+路径压缩

    Description Recognizing junk mails is a tough task. The method used here consists of two steps:  1) ...

  5. 【JavaSE】Java问题总结

    使用BufferedInputStream时OutOfMemoryError异常 eclipse Luna安装subversion(SVN) 使用BufferedInputStream时OutOfMe ...

  6. TCP/IP状态详解

    今天犯懒了,本来自己也做了一些相应的笔记,但是发现这篇写的更好一些,简单易懂,而且有图有真相,为了方便以后查看,在此转载了,在此基础上加了自己的笔记                 TCP正常建立和关 ...

  7. JS学习总结之操作文档对象模型

    操作文档对象模型 DOM 结构树 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可拓展置标语言的标准编程接口.它是一种与平台和语言无关的应用程序接口(A ...

  8. The Log-Structured Merge-Tree (LSM-Tree

    https://www.cs.umb.edu/~poneil/lsmtree.pdf [Log-Structured Merge-Tree ][结构化日志归并树][要解决的问题]The   Log-S ...

  9. php soap使用示例

    soap_client.php <?php try { $client = new SoapClient( null, array('location' =>"http://lo ...

  10. Python爬虫-- PyQuery库

    PyQuery库 PyQuery库也是一个非常强大又灵活的网页解析库,PyQuery 是 Python 仿照 jQuery 的严格实现.语法与 jQuery 几乎完全相同,所以不用再去费心去记一些奇怪 ...