bzoj5250 [2018多省省队联测]秘密袭击
博主蒟蒻,目前还不会动态dp,所以下面说的是一个并不优秀的暴力,我会补的!
我们考虑按权值从大到小依次点亮每个点,相同权值可以同时点亮,每次点亮后,我们进行一次树形背包。
处理出$f[i][j]$表示i的子树中有j个亮点的方案数,然后就AC了。
有两个小优化,一个是将背包的枚举上限设为min(size[x],K),此处size[x]为子树中点亮的点的的个数。
还有就是我们可以把大于K的dp值都和K合并到一起,因为我们需要的是所有大于等于K的方案数。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#define N 1700
#define mod 64123
using namespace std;
int e=,head[N];
struct edge{
int v,next;
}ed[N<<];
void add(int u,int v){
ed[e].v=v;
ed[e].next=head[u];
head[u]=e++;
}
int n,m,K,a[N],pp[N];
int f[N][N],g[N],size[N],vis[N],ans,sum,last;
bool cmp(int a,int b){return ::a[a]>::a[b];}
void dfs(int x,int fa){
for(int i=;i<=K;i++)f[x][i]=;
size[x]=vis[x];f[x][size[x]]=;
for(int i=head[x];i;i=ed[i].next){
int v=ed[i].v;
if(v==fa)continue;
dfs(v,x);
int up1=min(size[x],K),up2=min(size[v],K);
for(int j=min(up1+up2,K);~j;j--)g[j]=;
for(int j=up1;~j;j--)
for(int k=up2;~k;k--)
(g[min(j+k,K)]+=1ll*f[x][j]*f[v][k]%mod)%=mod;
size[x]+=size[v];
up1=min(size[x],K);
for(int j=;j<=up1;j++)f[x][j]=g[j];
}
f[x][]++;
(sum+=f[x][K])%=mod;
}
int main(){
scanf("%d%d%d",&n,&K,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
pp[i]=i;
}
sort(pp+,pp+n+,cmp);
for(int i=,u,v;i<n;i++){
scanf("%d%d",&u,&v);
add(u,v);add(v,u);
}
for(int i=;i<=n;){
do vis[pp[i]]=,i++;
while(i<=n&&a[pp[i]]==a[pp[i-]]);
if(i<K)continue;
sum=;dfs(,);
(ans+=1ll*(sum-last+mod)*a[pp[i-]]%mod)%=mod;
last=sum;
}
printf("%d\n",ans);
return ;
}
bzoj5250 [2018多省省队联测]秘密袭击的更多相关文章
- BZOJ_5249_Luogu_P4364_[2018多省省队联测]_IIIDX_九省联考2018_JLOI2018_线段树
BZOJ_5249_[2018多省省队联测]IIIDX_线段树 Description [题目背景] Osu听过没?那是Konano最喜欢的一款音乐游戏,而他的梦想就是有一天自己也能做个独特酷炫的音乐 ...
- 5249: [2018多省省队联测]IIIDX
5249: [2018多省省队联测]IIIDX 链接 分析: 贪心. 将给定的权值从大到小排序,从第一个往后挨个赋值,考虑第i个位置可以赋值那些树.首先满足前面必须至少有siz[i]个权值没选,如果存 ...
- bzoj 5249 [2018多省省队联测] IIIDX
bzoj 5249 [2018多省省队联测] IIIDX Link Solution 首先想到贪心,直接按照从大到小的顺序在后序遍历上一个个填 但是这样会有大问题,就是有相同的数的时候,会使答案不优 ...
- bzoj 5248: [2018多省省队联测]一双木棋
Description 菲菲和牛牛在一块n行m列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手.棋局开始时,棋盘上没有任何棋子, 两人轮流在格子上落子,直到填满棋盘时结束.落子的规则是:一个格子可以落子 ...
- bzoj 5251: [2018多省省队联测]劈配
Description 一年一度的综艺节目<中国新代码>又开始了. Zayid从小就梦想成为一名程序员,他觉得这是一个展示自己的舞台,于是他毫不犹豫地报名了. 题目描述 轻车熟路的Zayi ...
- bzoj5252 [2018多省省队联测]林克卡特树
斜率优化树形dp?? 我们先将问题转化成在树上选K+1条互不相交路径,使其权值和最大. 然后我们考虑60分的dp,直接维护每个点子树内选了几条路径,然后该点和0/1/2条路径相连 然后我们会发现最后的 ...
- bzoj5251 [2018多省省队联测]劈配
直接网络流模拟即可AC. 可持久化+暴力=90分, 可持久化+二分=30分, 暴力加边+二分=100分. 我也很无奈啊. Ivan便涨红了脸,额上的青筋条条绽出,争辩道,“memcpy也是可持久化…… ...
- bzoj5253 [2018多省省队联测]制胡窜
后缀自动机挺好毒瘤的题. 我们考虑哪些切点是不合法的.肯定是所有的匹配串都被切了. 我们考虑第一个切口的位置. 当第一个切口在第一个出现位置前时,第二个切口必须切掉所有的串. 当第一个切口在$l_{i ...
- bzoj5249 [2018多省省队联测]IIIDX
转化一下问题变成给定一棵树,一个序列,求父亲的权值小于子树的最大方案. 直接贪心会在有重复权值时出现错误,我们考虑用线段树优化贪心. 将序列从小到大排序,线段树上每个点记录他和他右边当前还可用的权值, ...
随机推荐
- 深入浅出web服务器与python应用程序之间的联系
简单来说,Web服务器是在运行在物理服务器上的一个程序,它永久地等待客户端(主要是浏览器,比如Chrome,Firefox等)发送请求.Web 服务器接受 Http Request,返回 Respon ...
- vncdotool - A command line VNC client
作者:Daly 出处:http://www.cnblogs.com/daly 欢迎转载,也请保留这段声明.谢谢! 之前的一个项目需要需求希望可以通过命令行去远程执行一些Windows 系统操作. 所以 ...
- java多线程的理解
java多线程的理解 线程的5种状态:新建,就绪,运行,阻塞,死亡. Thread.sleep:线程 运行状态 转为 阻塞状态,(其它线程启动运行) Thread.yield: 线程 运行 ...
- 详解URL的组成
很久很久以来,我对浏览器地址栏的信息了解的甚少,只知道域名(估计不知道是这么叫).唉...真是很汗颜啊!在软件专业都混了两年了,还是个菜鸟.说真的,有的时候觉得计算机这个领域真的真的有太多的东西要学了 ...
- Day15 Javascipt内容补充
JavaScript函数: 函数: function 函数名(a,b,c){ 执行代码 } 1,如何去找到标签 Dom直接选择器: 1,找到标签 #获取单个元素 document.getElement ...
- DDGScreenShot — 复杂屏幕截屏(如view ScrollView webView wkwebView)
写在前面 最近有这么一个需求,分享页面,分享的是web订单截图,既然是web 就会有超出屏幕的部分, 生成的图片还要加上我们的二维码,这就涉及到图片的合成了. 有了这样的需求,就是各种google.也 ...
- Invoke-ASCmd 部署SSAS database
Install-Module -Name SqlServer -RequiredVersion 21.0.17099 -AllowClobberInvoke-ASCmd -Server 10.162. ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第三周
一.逻辑回归问题(分类问题) 生活中存在着许多分类问题,如判断邮件是否为垃圾邮件:判断肿瘤是恶性还是良性等.机器学习中逻辑回归便是解决分类问题的一种方法.二分类:通常表示为yϵ{0,1},0:&quo ...
- Unity5 打assetbundle时,无法打成图集仍然是散图的原因
首先需要把 SpritePacker设置成可用 菜单Edit->project setting->editor 修改为可用 然后,保证所有图片的导入格式如下 最主要是 packi ...
- jvm GC
JavaGC.新生代.老年代 Java 中的堆是 JVM所管理的最大的一块内存空间,主要用于存放各种类的实例对象. 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( ...