洛谷 P4516 [JSOI2018] 潜入行动

news2024/11/26 8:53:31

题目来源于:洛谷

题目本质:背包,树形dp

解题思路:

假设当前合并两个背包f[u][a][p1][q1] 和f[v][b][p2][q2] ,其中 v 是 u 的儿子。考虑合并后的f[u][a+b][p3][q3],q3 是合并后点 u 是否被监听,有两种情况:u 之前已经被监听,u 现在被 v 监听。即:q3=q1∣p2 。

完整代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=100005;
const int mod=1000000007;
int N,K;
int f[MAXN][105][2][2];
int g[105][2][2];
int size[MAXN];
vector<int> G[MAXN];
int Mod(ll x,ll y){
    x%=mod,y%=mod;
    return (int)(x+y)%mod;
}
void dp(int u,int fa){
    size[u]=1;
    f[u][0][0][0]=f[u][1][1][0]=1;
    for(vector<int>::iterator it=G[u].begin();it!=G[u].end();it++){
        int v=*it;
        if(v==fa) continue;
        dp(v,u);
        for(register 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(register int i=0;i<=min(size[u],K);++i){
            for(register int j=0;j<=min(size[v],K-i);++j){
                f[u][i+j][0][0]=Mod((ll)f[u][i+j][0][0],(ll)g[i][0][0]*(ll)f[v][j][0][1]);
                f[u][i+j][0][1]=Mod((ll)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][1][1]+(ll)f[v][j][0][1]));
                f[u][i+j][1][0]=Mod((ll)f[u][i+j][1][0],(ll)g[i][1][0]*((ll)f[v][j][0][0]+(ll)f[v][j][0][1]));
                f[u][i+j][1][1]=Mod((ll)f[u][i+j][1][1],(ll)g[i][1][0]*((ll)f[v][j][1][0]+(ll)f[v][j][1][1])+(ll)g[i][1][1]*((ll)f[v][j][0][0]+(ll)f[v][j][0][1]+(ll)f[v][j][1][0]+(ll)f[v][j][1][1]));
            }
        }
        size[u]+=size[v];
    }
}
int main(){
    scanf("%d%d",&N,&K);
    for(register int i=1;i<N;++i){
        int u,v;
        scanf("%d%d",&u,&v);
        G[u].push_back(v);
        G[v].push_back(u);
    }
    dp(1,0);
    printf("%d",(int)(f[1][K][0][1]+f[1][K][1][1])%mod);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++拾趣——使用VSCode跨平台调试CMake编译的C/C++项目

大纲 远程连接编译调试安装插件/组件VSCode插件调试组件 配置CMakePresets.json配置CMake Tools调试 参考资料 VSCode的远程开发功能为开发者带来了诸多好处&#xff0c;极大地提升了开发效率和灵活性。首先&#xff0c;它允许开发者在本地编辑环境中直接连接到远程服务器或容器…

03 网络故障排查思路

一 排查思路 1 以业务流量路径为核心的故障排除思想 确认业务流量路径&#xff1a;在网络层和数据链路层中&#xff0c;需要根据报文转发过程确认业务流量的传输路径&#xff0c;以及数据帧在二层网络环境中是如何被交换机转发的。分层故障处理法&#xff1a;从OSI模型的底层…

【游戏行业秋招提前批最新动向应届生入职指南!】

游戏行业秋招提前批最新动向&应届生入职指南&#xff01; 秋招非常非常重要&#xff01;绝不能轻易错过&#xff01;&#xff01;! 早起的鸟儿有虫吃&#xff0c; 这句话对于企业和应届生双方而言都是适用的。 对于有校招需求的企业而言&#xff0c; 秋招是一年中规模最…

IDEA XML文件去掉黄色和绿色底色

XML映射文件去掉黄色背景&#xff1a;Settings ⇒ Editor ⇒ Inspections ⇒ SQL XML映射文件去掉绿色背景&#xff1a;Settings ⇒ Editor ⇒ Color Scheme ⇒ General ⇒ Code Java去掉重复代码提示&#xff1a;Settings ⇒ Editor ⇒ Inspections ⇒ General

页面设计任务 个人信息页面

目录 成品: 任务要求&#xff1a; 1. 创建一个基本的个人简介网页 2. 样式和布局要求 3. 详细样式要求 源码&#xff1a; 详细讲解&#xff1a; 1.导航栏部分&#xff1a; 2.头像和介绍部分: 3.技能列表部分 4.作品集部分 成品: 任务要求&#xff1a; 1. 创建一个基本…

B站宋红康JAVA基础视频教程个人笔记chapter07(面向对象高级)

文章目录 1.static关键字的学习1.1为什么需要static关键字1.2 static总结 2.单例设计模式3.静态代码块4.final关键字的使用5.抽象类和抽象方法5.1抽象类的由来 6.接口的使用6.1基本概念理解 7.匿名内部类的学习8.内部类9.枚举类9.包装类10.IDEA快捷键大全 1.static关键字的学习…

IOTE 2024 第二十二届国际物联网展 ·深圳站 8月28-30日唯创知音

​ 世界聚焦物联网&#xff0c;产业规模空前&#xff01;一场高端产业研学盛会即将如约而至。 IOTE 2024 第二十二届国际物联网展深圳站&#xff0c;2024年8月28-30日将在深圳国际会展中心(宝安)开展&#xff0c;汇聚全球超800家参展企业、13万来自工业、物流、基础建设、智慧…

MySQL基本查询 -- 表的增删改查CRUD

CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; 文章目录 1.Createa.insert语法&#xff1a;插入指定列&#xff1a;全列插入&#xff1a;一次插入多行数据&#xff1a; b. on duplicate key update ~ 插入否则更…

【前端】文件上传框架plupload使用(前后端交互)

这个框架是用来给前端设置文件上传的按钮的。 首先要明白&#xff0c;前端向后端发送请求的方式有get和post&#xff0c;两者的区别在于&#xff0c;前者只能在网址中携带参数&#xff0c;后者是在请求体body中携带参数。 Plupload向后端发送请求是post请求方式&#xff0c;发送…

Axios介绍;前后端分离开发的介绍;YAPI的使用;Vue项目简介、入门;Elementui的使用;nginx介绍

1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2个程序&#xf…

基于 Dots + GPU Instance 的大规模物体渲染

之前写的两篇开放世界技术栈都是公司其他同事做的&#xff0c;所以很多细节了解不详细。但这次是全程我自己搭建的轮子&#xff0c;可以讲得稍微详细些。 之前写的大规模物件渲染的 GPU 版本&#xff0c;虽然渲染量大效率高&#xff0c;但是有个很致命的缺陷&#xff1a;无法与…

Azure OpenAI citations with message correlation

题意&#xff1a;“Azure OpenAI 引用与消息关联” 问题背景&#xff1a; I am trying out Azure OpenAI with my own data. The data is uploaded to Azure Blob Storage and indexed for use with Azure AI search “我正在尝试使用自己的数据进行 Azure OpenAI。数据已上传…

行业应用 | 桥田MMC磁力换模系统-冲压场景案例分享

随着市场竞争的日益加剧&#xff0c;制造形态从单品种大批量转变为多品种小批量&#xff0c;品种的多样化对模具的多样化产生了需求&#xff0c;在更换产品品类时&#xff0c;首先需要更换加工模具。冲压是金属加工中的典型场景&#xff0c;如何缩短冲压模具的更换时间&#xf…

【Hot100】LeetCode—23. 合并 K 个升序链表

目录 1- 思路优先队列 2- 实现⭐23. 合并 K 个升序链表——题解思路 3- ACM 实现 原题连接&#xff1a;23. 合并 K 个升序链表 1- 思路 优先队列 1- 提供的数据结构&#xff1a;ListNode[] lists2- 由于提供的数据结构已经是有序的&#xff0c;不能通过指针实现是因为不知道一…

基于I2S和esp-now协议制作esp32对讲机

基于I2S和esp-now协议制作esp32对讲机 1.概述 这篇文章介绍基于I2S和esp-now协议制作对讲机&#xff0c;他的实现需要在ESP32开发环境的2.0.10版本号下才能成功&#xff0c;高版本号的源码有改动会导致编译失败。 安装ESP32 2.0.10版本&#xff1a; https://brucelong.blog.c…

2 nestjs 设计模式

回顾 MVC MVC&#xff08;Model-View-Controller&#xff09;设计模式是一种常用于软件开发的架构模式&#xff0c;旨在分离应用程序的不同部分&#xff0c;使得它们可以独立地开发、测试和维护。它将应用程序分为三个主要组件&#xff1a; Model&#xff08;模型&#xff09;…

什么牌子的开放式耳机性价比高?五款高口碑精品推荐!

由于传统入耳式耳机可能对耳道健康造成长期影响&#xff0c;许多人开始偏好选择开放式耳机的非侵入式设计。这种耳机有助于减少耳内湿润、细菌增长&#xff0c;以及耳道闷热的不适感。为了帮助大家在众多产品中挑选合适的开放式耳机&#xff0c;我将列举一些市场反馈良好的款式…

C#中的WebClient与XPath:实现精准高效的Screen Scraping

在现代互联网中&#xff0c;Screen Scraping&#xff08;屏幕抓取&#xff09;已成为从网页中提取信息的重要技术。对于C#开发者来说&#xff0c;WebClient和XPath是实现高效抓取的重要工具。本文将概述如何使用C#中的WebClient类结合XPath技术&#xff0c;实现精准高效的Scree…

探索科技潮流新领地厦门凯酷全科技有限公司抖音小店

在这个日新月异的数字时代&#xff0c;科技不仅深刻改变了我们的生活方式&#xff0c;更成为连接消费者与未来生活的桥梁。今天&#xff0c;就让我们一起走进厦门凯酷全科技有限公司的抖音小店&#xff0c;感受一场科技与时尚的完美碰撞&#xff0c;体验未来生活触手可及的魅力…

Python 和 PyCharm 安装(傻瓜式)

为什么要安装Python&#xff1f; 当我们写 python 代码的时候&#xff0c;需要有环境的支持&#xff0c;才可以运行代码。而 python 的安装支持了两个主要部分&#xff0c;分别是解释器和标准库。当我们安装完成&#xff0c;就可以使用python里面的标准库来写代码&#xff0c;而…