问题描述

LG4516

LOJ2546


题解

好一个毒瘤题。

hkk:JSOI的签到题

设\(opt[i][j][0/1][0/1]\)代表结点\(i\)的子树,放置\(j\)个,\(i\)放不放,\(i\)是否覆盖的方案数。

DP方程太长,无力打出(真·原因:我要睡觉!)。


\(\mathrm{Code}\)

#include<bits/stdc++.h>
using namespace std; template <typename Tp>
void read(Tp &x){
x=0;char ch=1;int fh;
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-'){
fh=-1;ch=getchar();
}
else fh=1;
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
x*=fh;
} const int maxn=100003;
const int mod=1000000007; int sum(long long x,long long y){
x=x%mod,y=y%mod;
return (int)((x+y)%mod);
} int opt[maxn][103][2][2];
int tmp[103][2][2],size[maxn]; int n,k; int Head[maxn],to[maxn*2],Next[maxn*2],tot; void add(int x,int y){
to[++tot]=y,Next[tot]=Head[x],Head[x]=tot;
} void dp(int x,int fa){
size[x]=opt[x][0][0][0]=opt[x][1][1][0]=1;
for(int i=Head[x];i;i=Next[i]){
int y=to[i];
if(y==fa) continue;
dp(y,x);
for(int j=0;j<=min(size[x],k);j++){
tmp[j][0][0]=opt[x][j][0][0],opt[x][j][0][0]=0;
tmp[j][0][1]=opt[x][j][0][1],opt[x][j][0][1]=0;
tmp[j][1][0]=opt[x][j][1][0],opt[x][j][1][0]=0;
tmp[j][1][1]=opt[x][j][1][1],opt[x][j][1][1]=0;
}
for(int j=0;j<=min(size[x],k);j++){
for(int p=0;p<=min(size[y],k-j);p++){
opt[x][j+p][0][0]=sum((long long)opt[x][j+p][0][0],(long long)tmp[j][0][0]*(long long)opt[y][p][0][1]);
opt[x][j+p][0][1]=sum((long long)opt[x][j+p][0][1],(long long)tmp[j][0][0]*(long long)opt[y][p][1][1]+(long long)tmp[j][0][1]*((long long)opt[y][p][1][1]+(long long)opt[y][p][0][1]));
opt[x][j+p][1][0]=sum((long long)opt[x][j+p][1][0],(long long)tmp[j][1][0]*((long long)opt[y][p][0][0]+(long long)opt[y][p][0][1]));
opt[x][j+p][1][1]=sum((long long)opt[x][j+p][1][1],(long long)tmp[j][1][0]*((long long)opt[y][p][1][0]+(long long)opt[y][p][1][1])+(long long)tmp[j][1][1]*((long long)opt[y][p][0][0]+(long long)opt[y][p][0][1]+(long long)opt[y][p][1][0]+(long long)opt[y][p][1][1]));
}
}
size[x]+=size[y];
}
} int main(){
read(n);read(k);
for(int i=1,x,y;i<n;i++){
read(x);read(y);
add(x,y);add(y,x);
}
dp(1,0);
printf("%d\n",(int)(opt[1][k][0][1]+opt[1][k][1][1])%mod);
return 0;
}

LG4516/LOJ2546 「JSOI2018」潜入行动 树上背包的更多相关文章

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

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

  2. 【LOJ】#2546. 「JSOI2018」潜入行动

    题解 dp[i][j][0/1][0/1]表示以\(i\)为根的子树,用了\(j\)个,i点选了或者没选,i点被覆盖或没被覆盖 转移比较显然,但是复杂度感觉不太对? 其实转移到100个的时候就使第二维 ...

  3. 「JSOI2018」战争

    「JSOI2018」战争 解题思路 我们需要每次求给一个凸包加上一个向量后是否与另外一个凸包相交,也就是说是否存在 \[ b\in B,(b+w)\in A \] 这里 \(A, B\) 表示凸包内部 ...

  4. LOJ 2551 「JSOI2018」列队——主席树+二分

    题目:https://loj.ac/problem/2551 答案是排序后依次走到 K ~ K+r-l . 想维护一个区间排序后的结果,使得可以在上面二分.求和:二分可以知道贡献是正还是负. 于是想用 ...

  5. 【LOJ】#2551. 「JSOI2018」列队

    题解 老年选手一道裸的主席树都要看好久才看出来 首先熟练的把这个区间建成\(n\)个主席树 然后对于一个询问,我们相当于在主席树上二分一个mid,使得\(mid - K + 1\)正好和\([l,r] ...

  6. BZOJ5319/LOJ2551「JSOI2018」列队

    问题描述 作为一名大学生,九条可怜在去年参加了她人生中的最后一次军训. 军训中的一个重要项目是练习列队,为了训练学生,教官给每一个学生分配了一个休息位置.每次训练开始前,所有学生都在各自的休息位置休息 ...

  7. LOJ 2550 「JSOI2018」机器人——找规律+DP

    题目:https://loj.ac/problem/2550 只会写20分的搜索…… #include<cstdio> #include<cstring> #include&l ...

  8. LOJ 2548 「JSOI2018」绝地反击 ——二分图匹配+网络流手动退流

    题目:https://loj.ac/problem/2548 如果知道正多边形的顶点,就是二分答案.二分图匹配.于是写了个暴力枚举多边形顶点的,还很愚蠢地把第一个顶点枚举到 2*pi ,其实只要 \( ...

  9. LOJ 2547 「JSOI2018」防御网络——思路+环DP

    题目:https://loj.ac/problem/2547 一条树边 cr->v 会被计算 ( n-siz[v] ) * siz[v] 次.一条环边会被计算几次呢?于是去写了斯坦纳树. #in ...

随机推荐

  1. Vue学习笔记Day2

    1.mustache语法 如何将data中的文本数据插入到HTML中? 通过使用mustache语法(也就是双大括号),将data中的变量名插入到HTML元素中,显示在页面上. 如下图:并且数据是响应 ...

  2. Dynamics 365中开发和注册插件介绍

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  3. springboot打包 出错 Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1

    遇到这个问题看了很多博客之后发现:执行这个语句就行了:mvn clean package -Dmaven.test.skip=true 本文链接:https://blog.csdn.net/weixi ...

  4. HttpClient发起Http/Https请求工具类

    <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcl ...

  5. fiddler抓包的一些基本知识整理

    fiddler常用命令:selelct xx: 高亮显示所有的text,js,image等响应类型?xxx:匹配所有url.protocol.host中包含xxx的会话=404:选择响应状态码为404 ...

  6. 【python爬虫】Xpath

    一.xml是什么 1.定义:可扩展标记性语言 2.特点:xml的是具有自描述结构的半结构化数据. 3.作用:xml主要设计宗旨是用来传输数据的.他还可以作为配置文件. 二.xml和html的区别 1. ...

  7. vue axios 在 edge 浏览器下的bug

    Edge 浏览器的版本: Microsoft Edge 42.17134.1.0Microsoft EdgeHTML 17.17134 当请求为POST 时,转换为  GET,并且始终报  “来自缓存 ...

  8. CSS定位的属性值

    关于CSS定位都是老生常谈的问题了,不过有一个问题,最新的属性值在某些网站上并没有被更新到教程上 下面我记录一下 position现在有五个属性值 1.static:静态定位,没有特殊的定位规则,遵循 ...

  9. three.js实现世界地图城市迁徙图

    概况如下: 1.THREE.CylinderGeometry,THREE.SphereGeometry绘制地图上的标记: 2.THREE.CanvasTexture用于加载canvas绘制的字体: 3 ...

  10. IDEA 2019.2版本下载安装与PJ教程

    场景 IDEA版本过低的话会导致某些IDEA插件没法安装,比如Lombok插件和EasyCode插件等. 实现 双击exe安装包 点击Next 选择安装路径,点击Next 设置桌面快捷方式,增加到右键 ...