潜入行动 bzoj-5314 Jsoi-2018

题目大意题目链接

注释:略。


想法

学长给我们除了一套考试题,三个学长一人一道这是T1.

好吧好吧,傻逼背包......

复杂度$O(nk)$。

Code:

#include<bits/stdc++.h>
#define mod 1000000007
#define N 100010
using namespace std; typedef long long ll;
int n,K,size[N];
ll g[101][2][2]; int f[N][101][2][2];
int tot,head[N],nxt[N<<1],to[N<<1];
inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
int rd() {int x=0; char c=nc(); while(!isdigit(c)) c=nc(); while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=nc(); return x;}
inline void OrzWinniechen(int &x,ll y) {x+y>=mod?x+=y-mod:x+=y;}
inline void add(int x,int y) {to[++tot]=y; nxt[tot]=head[x]; head[x]=tot;}
void dfs(int pos,int fa)
{
size[pos]=1; f[pos][0][0][0]=f[pos][1][1][0]=1;
for(int o=head[pos];o;o=nxt[o]) if(to[o]!=fa)
{
int v=to[o]; dfs(v,pos);
int kkk=min(size[pos],K),suika=min(size[v],K);
for(int i=0,r=kkk;i<=r;i++)
{
g[i][0][0]=f[pos][i][0][0],f[pos][i][0][0]=0;
g[i][0][1]=f[pos][i][0][1],f[pos][i][0][1]=0;
g[i][1][0]=f[pos][i][1][0],f[pos][i][1][0]=0;
g[i][1][1]=f[pos][i][1][1],f[pos][i][1][1]=0;
}
for(int i=0,r1=kkk;i<=r1;i++)
for(int j=0,r2=suika;i+j<=K&&j<=r2;j++)
{
// puts("OrzWinniechen");
OrzWinniechen(f[pos][i+j][0][0],
g[i][0][0]*f[v][j][0][1]%mod);
// printf("Shit %lld\n",f[pos][i+j][0][0]);
OrzWinniechen(f[pos][i+j][0][1],
(g[i][0][0]*f[v][j][1][1]
+g[i][0][1]*(f[v][j][0][1]
+f[v][j][1][1]))%mod);
// printf("Shit %lld\n",f[pos][i+j][0][1]);
OrzWinniechen(f[pos][i+j][1][0],
g[i][1][0]*(f[v][j][0][0]+f[v][j][0][1])%mod);
// printf("Shit %lld\n",f[pos][i+j][1][0]);
OrzWinniechen(f[pos][i+j][1][1],
(g[i][1][0]*(f[v][j][1][0]+f[v][j][1][1])
+g[i][1][1]*(f[v][j][0][0]+f[v][j][1][0])
+g[i][1][1]*(f[v][j][0][1]+f[v][j][1][1]))%mod);
// printf("Shit %lld\n",f[pos][i+j][1][1]);
}
size[pos]+=size[to[o]];
}
}
int main()
{
// freopen("polynomial.in","r",stdin);
// freopen("polynomial.out","w",stdout);
n=rd(),K=rd(); for(int i=1;i<n;i++) {int x=rd(),y=rd(); add(x,y); add(y,x);}
dfs(1,1);
printf("%d\n",(f[1][K][0][1]+f[1][K][1][1])%mod);
return 0;
}

小结:这种题其实只要做过一道就行了。

[bzoj5314][Jsoi2018]潜入行动_树形背包dp的更多相关文章

  1. BZOJ5314: [Jsoi2018]潜入行动

    BZOJ5314: [Jsoi2018]潜入行动 https://lydsy.com/JudgeOnline/problem.php?id=5314 分析: 裸树形背包,设\(f[x][i][0/1] ...

  2. HDU 1011 树形背包(DP) Starship Troopers

    题目链接:  HDU 1011 树形背包(DP) Starship Troopers 题意:  地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...

  3. 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp

    题目描述 给你一棵 $n$ 层的完全二叉树,每个节点可以染黑白两种颜色.对于每个叶子节点及其某个祖先节点,如果它们均为黑色则有一个贡献值,如果均为白色则有另一个贡献值.要求黑色的叶子节点数目不超过 $ ...

  4. 【bzoj1495】[NOI2006]网络收费 暴力+树形背包dp

    题目描述 给出一个有 $2^n$ 个叶子节点的完全二叉树.每个叶子节点可以选择黑白两种颜色. 对于每个非叶子节点左子树中的叶子节点 $i$ 和右子树中的叶子节点 $j$ :如果 $i$ 和 $j$ 的 ...

  5. 【bzoj4987】Tree 树形背包dp

    题目描述 从前有棵树. 找出K个点A1,A2,…,Ak. 使得∑dis(AiAi+1),(1<=i<=K-1)最小. 输入 第一行两个正整数n,k,表示数的顶点数和需要选出的点个数. 接下 ...

  6. 【bzoj2427】[HAOI2010]软件安装 Tarjan+树形背包dp

    题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大).但是现 ...

  7. 【bzoj4753】[Jsoi2016]最佳团体 分数规划+树形背包dp

    题目描述 JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人都由一位编号比他小的候选人Ri推荐.如果Ri=0则说明这个候选人是JYY自己看上的.为了 ...

  8. BZOJ_4753_[Jsoi2016]最佳团体_树形背包+01分数规划

    BZOJ_4753_[Jsoi2016]最佳团体_树形背包+01分数规划 Description JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人 ...

  9. [POJ1155]TELE(树形背包dp)

    看到这道题的第一眼我把题目看成了TLE 哦那不是重点 这道题是树形背包dp的经典例题 题目描述(大概的): 给你一棵树,每条边有一个cost,每个叶节点有一个earn 要求在earn的和大于等于cos ...

随机推荐

  1. 微软最新的Web服务器Katana发布了版本3

    Katana 项目入门 Howard Dierking 当 ASP.NET 首次在 2002 年发布时,时代有所不同. 那时,Internet 仍处于起步阶段,大约有 5.69 亿用户,每个用户平均每 ...

  2. 关于springMVC传参问题

    今天写项目,碰到一个以前灭有注意到的问题,一般情况下使用springMVC @Controller注解之后,被此注解标记的方法的参数名只需要跟页面表单的标签的name的值相同即可拿到页面的值,但是如果 ...

  3. CF916C Jamie and Interesting Graph

    思路:构造 实现: #include <bits/stdc++.h> using namespace std; int main() { int n, m; cin >> n ...

  4. VUE 全选

    <div id="vue_det"> <p>全选:</p> <input type="checkbox" id=&qu ...

  5. STM32编程环境配置(kile5)

    2018-08-2513:53:33 折腾了很久,花了两天的空闲时间终于烧进去程序了.完成了kile5对stm32编程的环境配置. 1.下载kile5 激活破解 2.安装stm32配置环境 3.加载工 ...

  6. LitePal用法详解

    一.首先我对数据库的操作基于LitePal的,是基于面向对象思想的,所以首先我先讲怎么使用LitePal 1.在build.garde(Module:app)里面的 dependencies{ //添 ...

  7. [备忘]Notification的实用

    Intent resultIntent = null; if (!TextUtils.isEmpty(tid)){ resultIntent = new Intent("com.shijie ...

  8. 最近面试oracle 数据库的知识点

    1. Oracle跟SQL Server 2005的区别? 宏观上: 1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windo ...

  9. 浅谈Key-value 存储——SILT

    摘要:本文以文章SILT: A Memory Efficient High Performance Key-Value Store 为基础,探讨SILT存储系统是如何实现内存占用低和高性能的设计目标, ...

  10. python照相机模型与增强现实

    这次试验主要实现以平面和标记物进行姿态估计以及增强现实的应用. 一.以平面和标记物进行姿态估计(1)下面演示的是一个简单例子:如何在一副图像上放置一个立方体,原图如下: (2)先提取两幅JPG图像的S ...