[JSOI 2018] 潜入行动
[题目链接]
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] 潜入行动的更多相关文章
- [BZOJ5250][九省联考2018]秘密袭击(DP)
5250: [2018多省省队联测]秘密袭击 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3 Solved: 0[Submit][Status][D ...
- JSOI部分题解
JSOI部分题解 JSOI2018 战争 问题转化为给定你两个凸包\(\mathbb S,\mathbb T\),每次独立的询问将\(\mathbb T\)中的每个点移动一个向量,问\(\mathbb ...
- 2018. The Debut Album
http://acm.timus.ru/problem.aspx?space=1&num=2018 真心爱过,怎么能彻底忘掉 题目大意: 长度为n的串,由1和2组成,连续的1不能超过a个,连续 ...
- Math.abs(~2018),掌握规律即可!
Math.abs(~2018) 某前端群的入门问题长姿势了,一个简单的入门问题却引发了我的思考,深深的体会到自己在学习前端技术的同时忽略遗忘了一些计算机的基础知识. 对于 JS Math对象没什么可说 ...
- 潜入ICU的四逆汤
制附子50克(先煎2小时).干姜15克.炙甘草10克.桂枝10克.上好肉桂10克(后下).煎取药液300毫升,分三次鼻饲.这是昨天我给A先生病危的父亲开的处方:四逆汤加肉桂.桂枝. 昨天上午的门诊到2 ...
- 2786: [JSOI]Word Query电子字典
2786: [JSOI]Word Query电子字典 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3 Solved: 3[Submit][Statu ...
- 1819: [JSOI]Word Query电子字典
1819: [JSOI]Word Query电子字典 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 729 Solved: 238[Submit][S ...
- 肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版
肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版 下载链接: https://u253469.ctfile.com/fs/253469-229815828
- 2018年的UX设计师薪酬预测,你能拿多少?
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 一个经验丰富的设计师完全可以根据地区和专业来可以预期薪酬之间的差距,其中悬殊最高可达80K. 本 ...
随机推荐
- jquery判断复选框是否被选中
$("#isUse").click(function(){ if($(this).is(':checked')){ $(this).attr('checked','checked' ...
- PHPExcel简易使用教程
在企业里使用PHP进行开发,不可避免总会遇到读/写Excel的需求,遇到这种需求,一般使用PHPExcel类库进行开发. PHPExcel现在最新版本是1.8.0,最低需要PHP5.2版本,支持读取x ...
- JavaScript -- JavaScript高级程序设计
/* 基本类型 Undefined, Null, Boolean, Number, String. 复杂类型 Object 它是所有对象的基础类型. 引用类型 Object 创建:new Ojbect ...
- CPI
CPI (Consumer Price Index 物价指数) 是政府用来衡量通货膨胀的其中一个数据.通俗的讲,CPI就是市场上的货物价格增长百分比.一般市场经济国家认为CPI在2-3%属于可接受范围 ...
- 嵌入式驱动开发之---Linux ALSA音频驱动(一)
本文的部分内容参考来自DroidPhone的博客(http://blog.csdn.net/droidphone/article/details/6271122),关于ALSA写得很不错的文章,只是少 ...
- 九度OJ 1150:Counterfeit Dollar(假美元) (分析、检验)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:485 解决:215 题目描述: Sally Jones has a dozen Voyageur silver dollars. Howev ...
- 九度OJ 1076:N的阶乘 (数字特性、大数运算)
时间限制:3 秒 内存限制:128 兆 特殊判题:否 提交:6384 解决:2238 题目描述: 输入一个正整数N,输出N的阶乘. 输入: 正整数N(0<=N<=1000) 输出: 输入可 ...
- Kubernetes TensorFlow 默认 特定 集群管理器
Our goal is to foster an ecosystem of components and tools that relieve the burden of running applic ...
- HTML 学习笔记 JQuery(事件)
加载DOM 以浏览器加载文档为例,在页面加载完毕后,浏览器会通过JavaScript为DOM元素添加事件.在常规的JavaScript中,通常使用window.onload方法,在JQuery中通常使 ...
- phpPHP创建创建jpg格式图片以及压缩图片(转)
其实是因为一些业务上的需求,所以需要对用户上传后的图片进行压缩,因为上传的图片比较大,显示的时候加载起来如果网速不给力的话就很吃力了,而且大图片也浪费空间,于是找了一下相关的资源,主要方法在开源中国上 ...