树形dp进阶题2 JSOI2018潜入行动
JSOI2018 潜入行动
题目描述
外星人又双叒叕要攻打地球了,外星母舰已经向地球航行!这一次,JYY 已经联系好了黄金舰队,打算联合所有 JSOIer 抵御外星人的进攻。
在黄金舰队就位之前,JYY 打算事先了解外星人的进攻计划。现在,携带了监听设备的特工已经秘密潜入了外星人的母舰,准备对外星人的通信实施监听。
外星人的母舰可以看成是一棵 nn 个节点、 n-1n−1 条边的无向树,树上的节点用 1,2,\cdots,n1,2,⋯,n 编号。JYY 的特工已经装备了隐形模块,可以在外星人母舰中不受限制地活动,可以神不知鬼不觉地在节点上安装监听设备。
如果在节点 uu 上安装监听设备,则 JYY 能够监听与 uu 直接相邻所有的节点的通信。换言之,如果在节点 uu 安装监听设备,则对于树中每一条边 (u,v)(u,v) ,节点 vv 都会被监听。特别注意放置在节点 uu 的监听设备并不监听 uu 本身的通信,这是 JYY 特别为了防止外星人察觉部署的战术。
JYY 的特工一共携带了 kk 个监听设备,现在 JYY 想知道,有多少种不同的放置监听设备的方法,能够使得母舰上所有节点的通信都被监听?为了避免浪费,每个节点至多只能安装一个监听设备,且监听设备必须被用完。
输入输出格式
输入格式:
输入第一行包含两个整数 n,kn,k ,表示母舰节点的数量 nn 和监听设备的数量 kk 。 接下来 n-1n−1 行,每行两个整数 u,vu,v (1\le u,v\le n)(1≤u,v≤n) ,表示树中的一条边。
输出格式:
输出一行,表示满足条件的方案数。因为答案可能很大,你只需要输出答案 \text{mod 1,000,000,007}mod 1,000,000,007 的余数即可。
题目传送门
我看见有帅哥说这道题是简单的树形dp 。。。有点沉默
设 f[i][j][0/1][0/1] f[i][j][0/1][0/1] 表示i的子树中已安装j个装置, i是/否安装,是/否被控制的方案数, 方程过长懒得解释,这道题难就难在要打的东西太多很容易出错
然后要注意,很容易爆空间和时间,数组开int,虽然dp过程中会爆int,但是数组要开int不然会爆,然后在dp的时候强制转long long。 这个地方我调试了好久
#include<bits/stdc++.h>
using namespace std;
//#define int long long
typedef long long ll;
const int mod=1e9+7;
int N,K,f[100010][105][2][2],size[100010],front[100010];long long g[105][2][2];
struct tEdge{int v,next;tEdge(int v=0,int next=0) : v(v) , next(next) {}
}e[200020];
void add(int u,int v)
{static int tcnt=0;e[++tcnt]=tEdge(v,front[u]);front[u]=tcnt;
}
int mo(int &a,ll b){return (a+((int)(b%mod)))%mod;
}
void dfs(int u,int fa){size[u]=1;f[u][0][0][0]=f[u][1][1][0]=1;for(int i=front[u];i;i=e[i].next){int v=e[i].v;if(v==fa)continue;dfs(v,u);for(int i=0;i<=min(size[u],K);++i){g[i][0][0]=f[u][i][0][0],f[u][i][0][0]=0;g[i][0][1]=f[u][i][0][1],f[u][i][0][1]=0;g[i][1][0]=f[u][i][1][0],f[u][i][1][0]=0;g[i][1][1]=f[u][i][1][1],f[u][i][1][1]=0;}for(int i=0;i<=min(size[u],K);++i)for(int j=0;j<=min(size[v],K-i);++j){f[u][i+j][0][0]=mo(f[u][i+j][0][0],(ll)g[i][0][0]*(ll)f[v][j][0][1]);f[u][i+j][1][0]=mo(f[u][i+j][1][0],(ll)g[i][1][0]*(ll)(f[v][j][0][0]+f[v][j][0][1]));f[u][i+j][0][1]=mo(f[u][i+j][0][1],(ll)g[i][0][0]*(ll)f[v][j][1][1]+(ll)g[i][0][1]*(ll)(f[v][j][0][1]+f[v][j][1][1]));f[u][i+j][1][1]=mo(f[u][i+j][1][1],(ll)g[i][1][0]*(ll)(f[v][j][1][1]+f[v][j][1][0])+(ll)g[i][1][1]*(ll)((ll)(f[v][j][0][0]+f[v][j][0][1])+(ll)(f[v][j][1][1]+f[v][j][1][0])));}size[u]+=size[v];}
}
main(){scanf("%d%d",&N,&K);for(int i=1;i<N;i++){int u,v;scanf("%d%d",&u,&v);add(u,v);add(v,u);}dfs(1,0);printf("%d\n",(f[1][K][1][1]+f[1][K][0][1])%mod);return 0;
}
树形dp进阶题2 JSOI2018潜入行动相关推荐
- POJ 1155 TELE 背包型树形DP 经典题
由电视台,中转站,和用户的电视组成的体系刚好是一棵树 n个节点,编号分别为1~n,1是电视台中心,2~n-m是中转站,n-m+1~n是用户,1为root 现在节点1准备转播一场比赛,已知从一个节点传送 ...
- hdu_Anniversary party_(树形DP入门题)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:有N个人,N-1个人有自己的上司,每个人有一个快乐值,如果这个人参加了聚会,那么这个人的直 ...
- 洛谷P1352 没有上司的舞会(树形DP水题)
题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...
- 树形dp瞎讲+树形dp基础题题解
---恢复内容开始--- 没错 咕了这么久(没有青青姐久 我又开始写博客了( ´▽`) 想了很久些什么(才没有想过呢 虽然被鄙视基础不好但还是走上了树形dp的不归路 那么 就来写写树形dp吧(dtx ...
- HDU 2196 Computer 树形DP经典题
链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...
- POJ3345 Bribing FIPA 【背包类树形dp】
题目链接 POJ 题解 背包树形dp板题 就是读入有点无聊,浪费了很多青春 #include<iostream> #include<cstdio> #include<cm ...
- 2018.09.01 独立集(树形dp)
描述 给定一颗树(边权为1),选取一个节点子集,使得该集合中任意两个节点之间的距离都大于K.求这个集合节点最多是多少 输入 第一行是两个整数N,K 接下来是N-1行,每行2个整数x,y,表示x与y有一 ...
- HDU 1520 Anniversary party(树形dp)
HDU 1520 Anniversary party(树形dp) 树形dp第一题!!! 题意很清晰,思路也很明确.很容易找到根节点,即最大的boss,通过根节点向下dp. 状态转移方程: int to ...
- bzoj 2427: [HAOI2010]软件安装(Trajan+树形DP)
2427: [HAOI2010]软件安装 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1844 Solved: 723 [Submit][Sta ...
最新文章
- python3项目-python3搭建Django项目
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
- 存在于实数域的微观粒子5-可分类性
- 迎接100G数据中心以太网
- 启动过滤器异常 java.lang.AbstractMethodError: ‘void javax.servlet.Filter.init(javax.servlet.FilterConfig)‘
- 深圳农村商业银行转账显示服务器无响应,深圳农村商业银行
- OutOfMemory (OOM)的类型与检测
- 您的Apache Camel应用程序现在包括现成的文档
- 不root的情况下 查看App的数据表
- android获取有线、wifi、3G(4G)的IP
- linux忘记管理员密码,如何登陆?
- 190521每日一句
- 七年级计算机上教学计划,新人教版七年级数学下册教学计划(精选5篇)
- qq服务器正在升级维护中,建议您稍后再尝试打开.谢谢!,用友通维护锦集
- 如何给这些textbox中赋值
- CH9102国产USB转高速串口芯片兼容替代CP2102
- 民营企业该如何留住人才
- 关于write和read以及文件读写位置
- 全面剖析canonical标签
- php 表格序号,excel自动生成序号、编号