【JSOI2018】潜入行动




树形\(DP\)。设\(f_{i,j,0/1,0/1}\)表示以\(i\)为根的子树中,用了\(j\)个监听器,是否放置了监听器,是否被监听的方案数。转移就多讨论几种情况就好了。

关键问题是直接这么做是\(O(NK^2)\)的。

解决方案就是,我们别\(DP\)边维护子树的大小\(size\),每次枚举子树的监听器的时候不能超过\(min\{size,k\}\)。这看似只是一个常数优化,但其实可以吧复杂度降到\(O(NK)\)。

可以看这位dalao的证明

\(DP\)的时候按合并的两个子树大小分为三种情况:

  1. 两个子树\(size\)均大于\(k\)。
  2. 其中一个大于\(k\),另一个小于等于\(k\)
  3. 两个子树大小均小于等于\(k\)

然后对于复杂度的分析:

  1. 合并一次\(O(k^2)\),但是最多这样合并\(\frac{n}{k}\)次。
  2. 考虑小的那颗子树每个点贡献一次复杂度。并且以后不会再贡献,因为合并后子树大小大于\(k\)了。
  3. 考虑每个点贡献的次数就是每个合并时另一颗子树的大小。所以每个点最多贡献\(K\)次。

所以复杂度\(O(NK)\)

代码:

#include<bits/stdc++.h>
#define ll long long
#define N 100005using namespace std;
inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}const ll mod=1e9+7;
int n,k;
struct road {int to,next;}s[N<<1];
int h[N],cnt;
void add(int i,int j) {s[++cnt]=(road) {j,h[i]};h[i]=cnt;}
ll f[N][105][2][2];
ll g[105][2][2];
int size[N];void dfs(int v,int fr) {size[v]=1;f[v][0][0][0]=1;f[v][1][1][0]=1;for(int i=h[v];i;i=s[i].next) {int to=s[i].to;if(to==fr) continue ;dfs(to,v);int lim=min(k,size[v]);memset(g,0,sizeof(g));for(int j=0;j<=lim;j++) {int lim2=min(size[to],k-j);for(int q=0;q<=lim2;q++) {(g[j+q][0][0]+=f[v][j][0][0]*f[to][q][0][1])%=mod;(g[j+q][0][1]+=f[v][j][0][1]*(f[to][q][0][1]+f[to][q][1][1])+f[v][j][0][0]*f[to][q][1][1])%=mod;(g[j+q][1][0]+=f[v][j][1][0]*(f[to][q][0][1]+f[to][q][0][0]))%=mod;(g[j+q][1][1]+=f[v][j][1][1]*(f[to][q][0][0]+f[to][q][0][1]+f[to][q][1][0]+f[to][q][1][1]))%=mod;(g[j+q][1][1]+=f[v][j][1][0]*(f[to][q][1][0]+f[to][q][1][1]))%=mod;}}memcpy(f[v],g,sizeof(g));size[v]+=size[to];}
}int main() {n=Get(),k=Get();int a,b;for(int i=1;i<n;i++) {a=Get(),b=Get();add(a,b),add(b,a);}dfs(1,0);int ans=0;ans=(ans+f[1][k][0][1]+f[1][k][1][1])%mod;cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/hchhch233/p/10512855.html

【JSOI2018】潜入行动相关推荐

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

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

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

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

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

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

  4. bzoj 5314 [Jsoi2018]潜入行动

    http://www.elijahqi.win/archives/3640 Description 外星人又双叒叕要攻打地球了,外星母舰已经向地球航行!这一次,JYY已经联系好了黄金舰队,打算联合所有 ...

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

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

  6. bzoj5314: [Jsoi2018]潜入行动【树形dp】

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

  7. Luogu P4516 [JSOI2018] 潜入行动

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

  8. [JSOI2018]潜入行动

    题解 一道思路不难但是写起来很麻烦的树形背包 我们发现每个节点有很多信息需要保留 所以就暴力的设\(f[u][j][0/1][0/1]\)表示点u的子树分配了j个监察器,点u有没有被控制,点u放没放监 ...

  9. 洛谷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 ...

  10. 深度式睡眠潜入虚拟世界_潜入swiftui的惊人世界

    深度式睡眠潜入虚拟世界 介绍: (Introduction:) SwiftUI is the most exciting news since Apple has announced Swift in ...

最新文章

  1. nginx 502错误 upstream sent too big header while reading response header from upstream
  2. zabbix items 配置
  3. [原创]敏捷管理实践看板思维导图
  4. Apache Maven 入门篇
  5. 图像处理中的秩、低秩、稀疏
  6. gradle的配置文件build.gradle、gradle.properties、settings.gradle示例
  7. 千年老二的 Python 值得学吗?
  8. centos7 + python 2.7 + pip + openvswitch 杂项问题
  9. 边缘计算应用场景_从6大应用场景,看边缘计算落地生根
  10. 初学python-练习_1使用python编写计算班级学生平均分程序
  11. 检测网络变化(wifi、2g、3g、4g)
  12. 50款PS完美汉化插件一键安装,win+mac
  13. 计算机基础知识vf试题及答案,2016年计算机二级考试《VF》上机试题及答案(1)
  14. 【深度学习】YOLOv7目标检测模型使用记录 yolov7-tiny
  15. 头条面试题:判断一个数是否是happy number(每一位的平方和最终为1)
  16. 互联网大厂轮流买单,春晚红包却不再“药到病除”?
  17. JDK动态代理过程中报错interface ** is not visible from class loader
  18. Outlook邮箱开源许可-android
  19. 玩电脑的岂能不知道excel怎么合并单元格?
  20. 一文了解下一代互联网核心技术HTTP/3及技术发展

热门文章

  1. 数据分析和数据可视化网站资源
  2. 高职计算机奖金核算表怎么做,学校在岗人员工资核算系统设计及实现.docx
  3. 系统安全博客3-windowsserver安全加固
  4. gprs模块连接到服务器,如何再使用AT命令
  5. 复星金服微服务_复星金控携手医伴金服加快医疗金融布局
  6. iOS归档 反归档 Archiving Unarchiver
  7. 无需开通网银---银联快捷支付
  8. 《经济学人》最新封面评下一个前沿技术:脑机接口正等待远见者的到来
  9. 自动化篇 | PC 端这款黑科技录制脚本,完爆按键精灵!
  10. 如何15天之内发表一篇ei会议英文论文?