[题目链接]

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. php遍历对象属性,可以使用foreach,直接打印出属性

    依然遵循私有属性不可以在外访问,(不能打印出来) 但可以在内部访问这个原则.

  2. easyUI中 datagrid 格式化日期

    $('#List').datagrid({ url: '@Url.Action("GetList")', width:SetGridWidthSub(10), methord: ' ...

  3. 语法之知识点的改进(Func/Action)

    上一章我们讲到关于面向对象思想上C#和JAVA之差别.笔者分别从面向对象的三大特性入手.而本章主要讲一些C#改进的知识点.在.NET Framework 2.0之后出现很多新的知识点.这些知识点更是让 ...

  4. 转载 -- iOS开发之JSON格式数据的生成与解析

    本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...

  5. pjax简单实例

    ajax缺点是破坏了浏览器的前进后退,因为ajax的请求不会留在历史记录中.pjax就不一样了,pjax被解释成ajax+pushState的封装,因为它把ajax的请求写入历史记录,并反映在地址栏, ...

  6. Python中urllib2总结

    使用Python访问网页主要有三种方式: urllib, urllib2, httpliburllib比较简单,功能相对也比较弱,httplib简单强大,但好像不支持session1. 最简单的页面访 ...

  7. virtual dynamic shared object

    vdso(7) - Linux manual page http://man7.org/linux/man-pages/man7/vdso.7.html NAME | SYNOPSIS | DESCR ...

  8. The template root requires exactly one element

    The template root requires exactly one element

  9. adjA=(detA)A-1

    A–>adjA 连续性 反函数

  10. php总结5——常量、文件上传

    5.1常量 系统常量: PHP_OS  操作系统 PHP_VERSION    php版本 PHP_SAPI    运行方式 自定义常量: define("常量名称"," ...