https://zybuluo.com/ysner/note/1141136

题面

求一颗大小为\(n\)的树取联通块的所有方案中,第\(k\)个数之和。

  • \(n\leq1,667,k\leq n\)

解析

这题可以当作暴力踩标算的范本题目。。。(其实是因为高级算法嵌套起来有时不如暴力快)

但这个暴力我是想不到的。。。

我们可以单独讨论每个点对答案的贡献,并把大于该点权值的点权值设为\(1\),其它设为\(0\)。接下来,我们就可以用\(O(nk^2\))的树形DP暴搞了。

但是,复杂度\(O(n^2k^2)\)会鬼啊。

于是换一种思路,枚举一颗树的根(讨论这个点对答案的贡献),统计儿子点在联通块中的结果,并强制取根到儿子点的路径。我们设\(dp[u][i]\)表示点\(u\)为联通块中第\(i\)个点的方案数,就可以转移了。

然而复杂度\(O(n^2k)\)???

但是我们只用枚举整颗树值排名\(\leq k\)的数作为根的情况,复杂度可以降为\(O((n-k)nk)\)。

这还跑过了。。。

Update:强制认为只能转移到 点权值大 或者 点权值相等且点编号大的点,否则会记重。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
#define re register
#define il inline
#define fp(i,a,b) for(re int i=a;i<=b;i++)
#define fq(i,a,b) for(re int i=s;i>=b;i--)
using namespace std;
const int N=2100,mod=64123;
struct Edge{int to,next;}e[N<<1];
int d[N],h[N],dp[N][N],ans,cnt,n,k,w,root,tot;
il void add(re int u,re int v){e[++cnt]=(Edge){v,h[u]};h[u]=cnt;}
il int gi()
{
re int x=0,t=1;
re char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') t=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*t;
}
il void dfs(re int u,re int fa)
{
if((d[root]<d[u])||((d[u]==d[root])&&u<root))
fp(i,1,k-1) (dp[u][i+1]+=dp[fa][i])%=mod;
else fp(i,1,k) (dp[u][i]+=dp[fa][i])%=mod;
for(re int i=h[u];i+1;i=e[i].next)
{
re int v=e[i].to;
if(v==fa) continue;
dfs(v,u);
}
fp(i,1,k) (dp[fa][i]+=dp[u][i])%=mod;
}
int main()
{
memset(h,-1,sizeof(h));
n=gi();k=gi();w=gi();
fp(i,1,n) d[i]=gi();
fp(i,1,n-1)
{
re int u=gi(),v=gi();add(u,v);add(v,u);
}
fp(i,1,n)
{
root=i;tot=0;
fp(j,1,n) if((d[j]>d[i])||(d[i]==d[j]&&i>j)) ++tot;
if(tot<k-1) continue;
memset(dp,0,sizeof(dp));
dp[i][1]=1;
for(re int j=h[i];j+1;j=e[j].next)
{
re int v=e[j].to;
dfs(v,i);
}
(ans+=(1ll*dp[i][k]*d[i])%mod)%=mod;
}
printf("%d\n",ans);
return 0;
}

LuoguP4365 [九省联考2018]秘密袭击的更多相关文章

  1. [九省联考2018]秘密袭击coat

    [九省联考2018]秘密袭击coat 研究半天题解啊... 全网几乎唯一的官方做法的题解:链接 别的都是暴力.... 要是n=3333暴力就完了. 一.问题转化 每个联通块第k大的数,直观统计的话,会 ...

  2. 【BZOJ5250】[九省联考2018]秘密袭击(动态规划)

    [BZOJ5250][九省联考2018]秘密袭击(动态规划) 题面 BZOJ 洛谷 给定一棵树,求其所有联通块的权值第\(k\)大的和. 题解 整个\(O(nk(n-k))\)的暴力剪剪枝就给过了.. ...

  3. [BZOJ5250][九省联考2018]秘密袭击(DP)

    5250: [2018多省省队联测]秘密袭击 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3  Solved: 0[Submit][Status][D ...

  4. P4365 [九省联考2018]秘密袭击coat

    $ \color{#0066ff}{ 题目描述 }$ Access Globe 最近正在玩一款战略游戏.在游戏中,他操控的角色是一名C 国士 兵.他的任务就是服从指挥官的指令参加战斗,并在战斗中取胜. ...

  5. 解题:九省联考2018 秘密袭击CoaT

    题面 按照*Miracle*的话来说,网上又多了一篇n^3暴力的题解 可能是因为很多猫题虽然很好,但是写正解性价比比较低? 直接做不可做,转化为统计贡献:$O(n)$枚举每个权值,直接统计第k大大于等 ...

  6. [九省联考 2018]秘密袭击coat

    Description 题库链接 给出一棵 \(n\) 个点的树,每个点有点权.求所有联通块的权值 \(k\) 大和,对 \(64123\) 取模. \(1\leq n,k\leq 1666\) So ...

  7. [LOJ #2473] [九省联考2018] 秘密袭击coat

    题目链接 洛谷. LOJ,LOJ机子是真的快 Solution 我直接上暴力了...\(O(n^2k)\)洛谷要\(O2\)才能过...loj平均单点一秒... 直接枚举每个点为第\(k\)大的点,然 ...

  8. 并不对劲的复健训练-bzoj5250:loj2473:p4365:[九省联考2018]秘密袭击

    题目大意 有一棵\(n\)(\(n\leq 1666\))个点的树,有点权\(d_i\),点权最大值为\(w\)(\(w\leq 1666\)).给出\(k\)(\(k\leq n\)),定义一个选择 ...

  9. luogu P4365 [九省联考2018]秘密袭击coat

    luogu 这里不妨考虑每个点的贡献,即求出每个点在多少个联通块中为第\(k\)大的(这里权值相同的可以按任意顺序排大小),然后答案为所有点权值\(*\)上面求的东西之和 把比这个点大的点看成\(1\ ...

随机推荐

  1. html5——多列布局

    基本概念 1.多列布局类似报纸或杂志中的排版方式,上要用以控制大篇幅文本. 2.跨列属性可以控制横跨列的数量 /*列数*/ -webkit-column-count: ; /*分割线*/ -webki ...

  2. linux 汇编 - 函数调用

    Linux 汇编-函数调用 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !i ...

  3. (转) Arcgis4js实现链家找房的效果

    http://blog.csdn.net/gisshixisheng/article/details/71009901 概述 买房的各位亲们不知是否留意过链家的"地图找房",这样的 ...

  4. 把excel、txt当数据库来查询

    Sub excel连接数据库() Dim Con As New ADODB.Connection Dim strCon, strsql As String Dim rs As ADODB.Record ...

  5. Redis 之hash集合结构及命令详解

    1.hset key field value   作用: 把key中 filed域的值设为value 注:如果没有field域,直接添加,如果有,则覆盖原field域的值 2.hmset key fi ...

  6. centos7 安装 PostgreSql

    确定你是管理员,然后运行命令: yum -y install postgresql-server postgresql-contrib 初始化数据库 postgresql-setup initdb 启 ...

  7. viod 0是什么?

    之前在牛客网上看到别人用viod 0来代替undefined,所以我去网上搜了一下,MDN是这么说的: 这个运算符能向期望一个表达式的值是undefined的地方插入会产生副作用的表达式. void ...

  8. jq购物车结算功能

    css *{font-style: normal} .gw{margin: 8px;} .gw::after{display: block;clear: both;content: '';margin ...

  9. Django - 内容总结(1)

    内容整理: 1.创建django工程名称 django-admin startproject 工程名 2.创建app cd 工程名 python manage.py startapp cmdb 3.静 ...

  10. 10.mysql事务管理及python操作

    在用户操作MySQL过程中,对于一般简单的业务逻辑或中小型程序而言,无需考虑应用MySQL事务.但在比较复杂的情况下,往往用户在执行某些数据操作过程中,需要通过一组SQL语句执行多项并行业务逻辑或程序 ...