Description

外星人又双叒叕要攻打地球了,外星母舰已经向地球航行!这一次,JYY已经联系好了黄金舰队,打算联合所有JSO
Ier抵御外星人的进攻。在黄金舰队就位之前,JYY打算事先了解外星人的进攻计划。现在,携带了监听设备的特工
已经秘密潜入了外星人的母舰,准备对外星人的通信实施监听。外星人的母舰可以看成是一棵n个节点、n-1条边的
无向树,树上的节点用1,2…n编号。JYY的特工已经装备了隐形模块,可以在外星人母舰中不受限制地活动,可以
神不知鬼不觉地在节点上安装监听设备。如果在节点u安装监听设备,则JYY能够监听与u直接相邻所有的节点的通
信。换言之,如果在节点u安装监听设备,则对于树中每一条边(u,v),节点v都会被监听。特别注意放置在节点u的
监听设备并不监听u本身的通信,这是JYY特别为了防止外星人察觉部署的战术。
JYY的特工一共携带了k个监听设备,现在JYY想知道,有多少种不同的放置监听设备的方法,能够使得母舰上所有
节点的通信都被监听?为了避免浪费,每个节点至多只能安装一个监听设备,且监听设备必须被用完。

Input

输入第一行包含两个整数n,k,表示母舰节点的数量n和监听设备的数量k。
接下来n-1行,每行两个整数u,v(1≤u,v≤n),表示树中的一条边。
1≤n≤10^5,1≤k≤min{n,100}

Output

输出一行,表示满足条件的方案数。
因为答案可能很大,你只需要输出答案mod 1,000,000,007的余数即可

Sample Input

5 3

1 2

2 3

3 4

4 5

Sample Output

1

样例解释

样例数据是一条链

1–2–3–4–5

首先,节点 2和 4必须放置监听设备,否则 1,5将无法被监听(放置的监听设备无法监听它所在的节点)。剩下一

个设备必须放置在 3号节点以同时监听 2,4因此在 2,3,4节点放置监听设备是唯一合法的方案。

解题思路:

注意答案是恰好安k个的方案数。
设f[i][j][0/1][0/1]f[i][j][0/1][0/1]f[i][j][0/1][0/1]表示 iii 的子树内安了 j" role="presentation" style="position: relative;">jjj 个监听器,ii<script type="math/tex" id="MathJax-Element-5">i</script> 处是否安了监听器,是否被监听,直接dp即可。

#include<bits/stdc++.h>
#define ll unsigned long long
using namespace std;
int getint()
{int i=0,f=1;char c;for(c=getchar();(c!='-')&&(c<'0'||c>'9');c=getchar());if(c=='-')c=getchar(),f=-1;for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0';return i*f;
}
const int N=100005,mod=1e9+7;
int n,K,f[N][105][2][2],size[N];ll tmp[105][2][2];
int tot,first[N],nxt[N<<1],to[N<<1];
inline void add(int &x,ll y)
{x=(x+y>=mod?x+y-mod:x+y);
}
void Add(int x,int y)
{nxt[++tot]=first[x],first[x]=tot,to[tot]=y;
}
void dfs(int u,int fa)
{size[u]=1;f[u][0][0][0]=f[u][1][1][0]=1;for(int e=first[u];e;e=nxt[e]){int v=to[e];if(v==fa)continue;dfs(v,u);for(int i=0,r=min(size[u],K);i<=r;i++)for(int j=0;j<=1;j++)for(int k=0;k<=1;k++)tmp[i][j][k]=f[u][i][j][k],f[u][i][j][k]=0;for(int i=0,r1=min(size[u],K);i<=r1;i++)for(int j=0,r2=min(size[v],K);i+j<=K&&j<=r2;j++){add(f[u][i+j][0][0],tmp[i][0][0]*f[v][j][0][1]%mod);add(f[u][i+j][0][1],(tmp[i][0][0]*f[v][j][1][1]+tmp[i][0][1]*(f[v][j][0][1]+f[v][j][1][1]))%mod);add(f[u][i+j][1][0],tmp[i][1][0]*(f[v][j][0][0]+f[v][j][0][1])%mod);add(f[u][i+j][1][1],(tmp[i][1][0]*(f[v][j][1][0]+f[v][j][1][1])+tmp[i][1][1]*(f[v][j][0][0]+f[v][j][1][0])+tmp[i][1][1]*(f[v][j][0][1]+f[v][j][1][1]))%mod);}size[u]+=size[v];}
}
int main()
{//freopen("action.in","r",stdin);//freopen("action.out","w",stdout);n=getint(),K=getint();for(int i=1;i<n;i++){int x=getint(),y=getint();Add(x,y),Add(y,x);}dfs(1,0);cout<<(f[1][K][0][1]+f[1][K][1][1])%mod<<'\n';return 0;
}

bzoj5314: [Jsoi2018]潜入行动【树形dp】相关推荐

  1. [bzoj5314][Jsoi2018]潜入行动_树形背包dp

    潜入行动 bzoj-5314 Jsoi-2018 题目大意:题目链接. 注释:略. 想法: 学长给我们除了一套考试题,三个学长一人一道这是T1. 好吧好吧,傻逼背包...... 复杂度$O(nk)$. ...

  2. LOJ 2546 「JSOI2018」潜入行动——树形DP

    题目:https://loj.ac/problem/2546 dp[ i ][ j ][ 0/1 ][ 0/1 ] 表示 i 子树,用 j 个点,是否用 i , i 是否被覆盖. 注意 s1<= ...

  3. 树形dp进阶题2 JSOI2018潜入行动

    JSOI2018 潜入行动 题目描述 外星人又双叒叕要攻打地球了,外星母舰已经向地球航行!这一次,JYY 已经联系好了黄金舰队,打算联合所有 JSOIer 抵御外星人的进攻. 在黄金舰队就位之前,JY ...

  4. 洛谷:P4516 [JSOI2018] 潜入行动(树形dp、树上分组背包统计方案数)

    潜入行动 题意: 在树上每个点可以放置监控设备,监控该点周围的点(不包括该点),问刚好放置 k 个监控设备监控使得整棵树所有点都被监控的方案数是多少. 思路: 显然是个树形dp,k个监控自然联想分组背 ...

  5. 洛谷P4516:[JSOI2018]潜入行动(树形dp)

    题面 大概就是树形dp 设f[i][j][0/1][0/1]f[i][j][0/1][0/1]f[i][j][0/1][0/1],表示iii的子树里选了j" role="prese ...

  6. 【题解】P4516 [JSOI2018] 潜入行动

    [题解]P4516 [JSOI2018] 潜入行动 比较常规但是有点思维含量的一道树形 DP. 题目链接 P4516 [JSOI2018] 潜入行动 题意概述 给定一棵有 \(n\) 个点的树,现在要 ...

  7. Luogu P4516 [JSOI2018] 潜入行动

    题目描述 外星人又双叒叕要攻打地球了,外星母舰已经向地球航行!这一次,JYY 已经联系好了黄金舰队,打算联合所有 JSOIer 抵御外星人的进攻. 在黄金舰队就位之前,JYY 打算事先了解外星人的进攻 ...

  8. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  9. [树形dp] Jzoj P5233 概率博弈

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...

最新文章

  1. [Notice]博客地址转移 vitostack.com
  2. 售前比售后机器人控制逻辑更复杂,仅凭大规模数据后发优势难赶超!
  3. Linux下Bash入门学习笔记
  4. Linux shell只读变量
  5. linux下w和who使用说明
  6. 计蒜客挑战难题:简单斐波那契
  7. Web 2.0下一个版本是什么 3.0就要到来了吗?
  8. 基于springboot的猫头鹰物业管理系统
  9. 苏州外壳防护试验IP防尘防水测试IP65 IP66 IP69K
  10. 计算机仿真在机械应用,机械系统计算机仿真
  11. Win10连接上了wifi但是打开浏览器显示网络异常,诊断网络发现错误“远程计算机或者设备将不接受连接
  12. iOS应用安全Part1:搭建移动渗透测试平台
  13. 大神偷偷收藏的7个自学网站,质量高且免费,请低调使用
  14. springcloud五大神兽及其原理
  15. 婚恋交友源码开发,实现图片的滑动切换
  16. 利用Python爬虫爬取网页福利图片
  17. Mycat-eye使用入门教程
  18. java字符串校验,过滤筛选中英文符号
  19. Jetson TX2 刷机(wifi)
  20. mysql调度器线程_mysql5.1事件调度器

热门文章

  1. iOS 指纹、Face ID验证 --- LocalAuthentication
  2. C++之路进阶——codevs2313(星际竞速)
  3. 假定1km长的CSMA/CD网络的数据率为1Gb/s。设信号在网络上的传播速率为200000km/s。求能够使用此协议的最短帧长。
  4. c语言反应能力的手机游戏,锻炼反应能力的游戏合集
  5. android控件向内弧度_android给View设置边框 填充颜色 弧度
  6. ESP32设备驱动-LX1972可见光传感器驱动
  7. python 循环实现延时_Python延时操作实现方法示例
  8. ie visio 打开_Visio viewer 不能从IE打开vsd文件(转) | 学步园
  9. Tomcat 8080,8005端口占用问题
  10. iOS开发Implicit declaration of function 'XXXX' is invalid in C99” 报错问题