秘密袭击 [BZOJ5250] [树形DP]
分析:
听说正解是FFT+线段树合并,然而我并不会...
我们来思考其他的方法。
我们要求的是连通块第k大的和
对于某一个连通块,对答案的贡献=val(Rank.K)
我们不好直接算出每个连通块的Rank.K是多少
但我们可以枚举一个limit for 1->w ,Σ(val(Rank.K)>=lim的连通块的个数)就等于答案
为什么呢,因为这样一个连通块就被统计了val(Rank.K)次。
剩下的进行树形DP,设dp[i][j]为以i为根的子树,选出j个权值>=limit的点的方案数。
那么最后统计答案的时候便是Σ(dp[i][j])(K<=j<=size(i))
复杂度N^3其实是不对的,但是卡一卡常数还是过得去的
代码:
- #include<set>
- #include<map>
- #include<queue>
- #include<stack>
- #include<cmath>
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- #define RG register int
- #define rep(i,a,b) for(RG i=a;i<=b;++i)
- #define per(i,a,b) for(RG i=a;i>=b;--i)
- #define ll long long
- #define inf (1<<29)
- #define maxn 2000
- #define add(x,y) e[++cnt].v=y,e[cnt].next=head[x],head[x]=cnt
- using namespace std;
- int n,m,cnt,w;
- int ss[maxn],isn[maxn],head[maxn];
- ll lim,ans;
- ll val[maxn],dp[maxn][maxn],sz[maxn];
- //dp[i][j] 在以i为根的子树,选择了j个权值大于等于lim的点的方案数
- const ll mo=;
- struct E{
- int v,next;
- }e[maxn<<];
- inline int read()
- {
- int x=,f=;char c=getchar();
- while(c<''||c>''){if(c=='-')f=-;c=getchar();}
- while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
- return x*f;
- }
- inline int MO(int x,int v){x+=v;return x>=mo?x-mo:x;}
- void dfs(int u,int fa)
- {
- sz[u]=(val[u]>=lim)?:;
- dp[u][sz[u]]=;
- for(int i=head[u];i;i=e[i].next)
- {
- int v=e[i].v;
- if(v==fa) continue;
- dfs(v,u);
- per(ii,sz[u],)
- if(dp[u][ii])
- per(j,sz[v],)
- if(dp[v][j])dp[u][ii+j]=MO(dp[u][ii+j],(dp[u][ii]*dp[v][j])%mo);
- sz[u]+=sz[v];
- }
- rep(i,m,sz[u]) ans=MO(ans,dp[u][i]);
- }
- int main()
- {
- n=read(),m=read(),w=read();
- rep(i,,n) val[i]=read(),ss[val[i]]++;
- for(RG i=,u,v;i<n;i++) u=read(),v=read(),add(u,v),add(v,u);
- per(i,w,) ss[i]+=ss[i+];
- rep(i,,w)
- {
- if(ss[i]<m) break;
- memset(dp,,sizeof(dp));lim=i;
- dfs(,);
- }
- cout<<ans;
- return ;
- }
秘密袭击 [BZOJ5250] [树形DP]的更多相关文章
- [JZOJ4272] [NOIP2015模拟10.28B组] 序章-弗兰德的秘密 解题报告(树形DP)
Description 背景介绍弗兰德,我不知道这个地方对我意味着什么.这里是一切开始的地方.3年前,还是个什么都没见过的少年,来到弗兰德的树下,走进了封闭的密室,扭动的封尘已久机关,在石板上知道了这 ...
- [BZOJ5250][九省联考2018]秘密袭击(DP)
5250: [2018多省省队联测]秘密袭击 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3 Solved: 0[Submit][Status][D ...
- 【BZOJ5250】[九省联考2018]秘密袭击(动态规划)
[BZOJ5250][九省联考2018]秘密袭击(动态规划) 题面 BZOJ 洛谷 给定一棵树,求其所有联通块的权值第\(k\)大的和. 题解 整个\(O(nk(n-k))\)的暴力剪剪枝就给过了.. ...
- P4365 [九省联考2018]秘密袭击coat
$ \color{#0066ff}{ 题目描述 }$ Access Globe 最近正在玩一款战略游戏.在游戏中,他操控的角色是一名C 国士 兵.他的任务就是服从指挥官的指令参加战斗,并在战斗中取胜. ...
- Vijos p1770 大内密探 树形DP+计数
4天终于做出来了,没错我就是这么蒟蒻.教训还是很多的. 建议大家以后编树形DP不要用记忆化搜索,回溯转移状态个人感觉更有条理性. 大神题解传送门 by iwtwiioi 我的题解大家可以看注释&quo ...
- BZOJ_2068_[Poi2004]SZP_树形DP
BZOJ_2068_[Poi2004]SZP_树形DP Description Byteotian 中央情报局 (BIA) 雇佣了许多特工. 他们每个人的工作就是监视另一名特工. Byteasar 国 ...
- [九省联考2018]秘密袭击coat
[九省联考2018]秘密袭击coat 研究半天题解啊... 全网几乎唯一的官方做法的题解:链接 别的都是暴力.... 要是n=3333暴力就完了. 一.问题转化 每个联通块第k大的数,直观统计的话,会 ...
- [loj2546][JSOI2018]潜入行动(树形DP)
题目描述 外星人又双叒叕要攻打地球了,外星母舰已经向地球航行!这一次,JYY 已经联系好了黄金舰队,打算联合所有 JSOIer 抵御外星人的进攻. 在黄金舰队就位之前,JYY 打算事先了解外星人的进攻 ...
- poj3417 LCA + 树形dp
Network Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4478 Accepted: 1292 Descripti ...
随机推荐
- pycharm安装mysql驱动包
新的环境配置pycharm的项目时,发现pycharm不能连接到mysql数据库.由于安了java环境但是还没配置相关的库,并且jetbrains家的IDE一般都是java写的,于是猜想可能是java ...
- 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)
在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高可用,单个服务 ...
- Python Day-1 练习
作业1 要求:1.输入用户密码 2.认真成功后显示欢迎信息 3.输入三次锁定 代码如下: __author__ = 'zhang.ning' username = "zhangning&qu ...
- [转] createObjectURL方法 实现本地图片预览
ie6 可以直接显示本本地路径的图片 如: <img src="file://c:/3.jpg" /> ~~~网上都说ie7就不支持这种文件系统路径的url,但测试 ...
- javascript OOP(下)(九)
一.javascript模拟重载 java中根据参数类型和数量的区别来实现重载,javascript弱类型,没有直接的机制实现重载,javascript中参数类型不确定和参数个数任意,通过判断实际传入 ...
- System.Data.Entity.Internal.AppConfig"的类型初始值设定项引发异常
在学习EF code First的小案例的时候,遇见了这个异常 <configSections> <!-- For more information on Entity Framew ...
- ubuntu ibus pinyin输入法异常
http://blog.csdn.net/granvillegao/article/details/41115211 命令行运行 ibus-setup 在常规页面,取消了“在应用程序窗口中启用内嵌编辑 ...
- [转]利用ssh传输文件
利用ssh传输文件 http://www.cnblogs.com/jiangyao/archive/2011/01/26/1945570.html 在linux下一般用scp这个命令来通过ssh传输文 ...
- chkconfig命令 centos 开机启动命令
.利用 chkconfig 来配置启动级别 在CentOS或者RedHat其他系统下,如果是后面安装的服务,如httpd.mysqld.postfix等,安装后系统默认不会自动启动的.就算手动执行 / ...
- HDFS-HA高可用 | Yarn-HA
HDFS-HA HA(High Available),即高可用(7*24小时不中断服务) 单点故障即有一台机器挂了导致全部都挂了:HA就是解决单点故障,就是针对NameNode: 主Active:读写 ...