[九省联考 2018]秘密袭击coat
Description
给出一棵 \(n\) 个点的树,每个点有点权。求所有联通块的权值 \(k\) 大和,对 \(64123\) 取模。
\(1\leq n,k\leq 1666\)
Solution
写正解是不可能的,这辈子都不可能的。只有写暴力才能维持的了生活这样子。
不妨枚举连通块内第 \(k\) 大的点。为了方便讨论,当点权相同时,点的标号越大,点优先级越高。
将优先级高于枚举的点的点权赋值为 \(1\) ,低于枚举的点的点权赋值为 \(0\) 。然后就是找包含枚举的点在内的连通块点权和 \(= k-1\) 的个数。
简易的树 \(dp\) 即可。
Code
#include <bits/stdc++.h>
using namespace std;
const int N = 1666+5, yzh = 64123;
int n, k, w, d[N], u, v, root, ans, f[N][N];
struct tt {int to, next; }edge[N<<1];
int path[N], top;
void dfs(int u, int fa) {
if (d[u] > d[root] || (d[u] == d[root] && u > root)) {
f[u][1] = 0; for (int i = 1; i < k; i++) f[u][i+1] = f[fa][i];
}else for (int i = 1; i <= k; i++) f[u][i] = f[fa][i];
for (int i = path[u]; i; i = edge[i].next)
if (edge[i].to != fa) dfs(edge[i].to, u);
for (int i = 1; i <= k; i++) {
f[fa][i] += f[u][i];
if (f[fa][i] >= yzh) f[fa][i] -= yzh;
}
}
void add(int u, int v) {edge[++top] = (tt){v, path[u]}; path[u] = top; }
void work() {
scanf("%d%d%d", &n, &k, &w);
for (int i = 1; i <= n; i++) scanf("%d", &d[i]);
for (int i = 1; i < n; i++) {
scanf("%d%d", &u, &v); add(u, v), add(v, u);
}
for (int i = 1; i <= n; i++) {
root = i; int tot = 0;
for (int j = 1; j <= n; j++) tot += bool(d[j] > d[i] || (d[j] == d[i] && j > i));
if (tot < k-1) continue; f[i][1] = 1;
for (int j = 2; j <= k; j++) f[i][j] = 0;
for (int j = path[i]; j; j = edge[j].next) dfs(edge[j].to, i);
ans += 1ll*d[i]*f[i][k]%yzh; if (ans >= yzh) ans -= yzh;
}
printf("%d\n", ans);
}
int main() {work(); return 0; }
[九省联考 2018]秘密袭击coat的更多相关文章
- [九省联考2018]秘密袭击coat
[九省联考2018]秘密袭击coat 研究半天题解啊... 全网几乎唯一的官方做法的题解:链接 别的都是暴力.... 要是n=3333暴力就完了. 一.问题转化 每个联通块第k大的数,直观统计的话,会 ...
- P4365 [九省联考2018]秘密袭击coat
$ \color{#0066ff}{ 题目描述 }$ Access Globe 最近正在玩一款战略游戏.在游戏中,他操控的角色是一名C 国士 兵.他的任务就是服从指挥官的指令参加战斗,并在战斗中取胜. ...
- 解题:九省联考2018 秘密袭击CoaT
题面 按照*Miracle*的话来说,网上又多了一篇n^3暴力的题解 可能是因为很多猫题虽然很好,但是写正解性价比比较低? 直接做不可做,转化为统计贡献:$O(n)$枚举每个权值,直接统计第k大大于等 ...
- [LOJ #2473] [九省联考2018] 秘密袭击coat
题目链接 洛谷. LOJ,LOJ机子是真的快 Solution 我直接上暴力了...\(O(n^2k)\)洛谷要\(O2\)才能过...loj平均单点一秒... 直接枚举每个点为第\(k\)大的点,然 ...
- luogu P4365 [九省联考2018]秘密袭击coat
luogu 这里不妨考虑每个点的贡献,即求出每个点在多少个联通块中为第\(k\)大的(这里权值相同的可以按任意顺序排大小),然后答案为所有点权值\(*\)上面求的东西之和 把比这个点大的点看成\(1\ ...
- 【BZOJ5250】[九省联考2018]秘密袭击(动态规划)
[BZOJ5250][九省联考2018]秘密袭击(动态规划) 题面 BZOJ 洛谷 给定一棵树,求其所有联通块的权值第\(k\)大的和. 题解 整个\(O(nk(n-k))\)的暴力剪剪枝就给过了.. ...
- [BZOJ5250][九省联考2018]秘密袭击(DP)
5250: [2018多省省队联测]秘密袭击 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3 Solved: 0[Submit][Status][D ...
- LuoguP4365 [九省联考2018]秘密袭击
https://zybuluo.com/ysner/note/1141136 题面 求一颗大小为\(n\)的树取联通块的所有方案中,第\(k\)个数之和. \(n\leq1,667,k\leq n\) ...
- 并不对劲的复健训练-bzoj5250:loj2473:p4365:[九省联考2018]秘密袭击
题目大意 有一棵\(n\)(\(n\leq 1666\))个点的树,有点权\(d_i\),点权最大值为\(w\)(\(w\leq 1666\)).给出\(k\)(\(k\leq n\)),定义一个选择 ...
随机推荐
- MySql数据库远程连接失败问题解决
例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话. GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY ...
- SQL Server 紧急状态下的数据库恢复
背景:由于服务器硬盘损坏,服务器异常关机.重新进入后,数据库为质疑状态.(数据库名字上面有个感叹号,连接不了) 经过无数次的百度以及大佬们的指点下,终于成功恢复,下面来说一下方法. 第一种: 1.在服 ...
- C#中的split的基本用法
split的使用: 1.使用char()字符分隔:根据单个的char()类型的进行分隔 代码如下: string str="e2kdk2fjod2fiksf21"; ');//因为 ...
- HTTP服务介绍
摘自 https://mp.weixin.qq.com/s?__biz=MzI4NDM5NzE4Ng==&mid=2247484093&idx=1&sn=3d87e9772ff ...
- Exp6 信息搜集与漏洞扫描 20164323段钊阳
20164323 Exp6 信息搜集与漏洞扫描 回答问题 1.哪些组织负责DNS,IP的管理. 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和IP地址管理.全球一共 ...
- D - 统计同成绩学生人数
点击打开链接 读入N名学生的成绩,将获得某一给定分数的学生人数输出. Input 测试输入包含若干测试用例,每个测试用例的格式为 第1行:N 第2行:N名学生的成绩,相邻两数字用一个空格间隔. ...
- 【JXOI2018】排序问题 贪心
我们令$sum_i$表示数字i在加完数字的数列中出现的次数,那么答案显然为$\dfrac{(n+m)!}{\sum_{i=0}^{\infty}sum_i!}$ 不难发现,当每次添加的数为$[l,r] ...
- 【xsy1147】 异或(xor) 可持久化trie
我的脑回路可能比较奇怪. 我们对这些询问离线,将所得序列${a}$的后缀和建$n$棵可持久化$trie$. 对于一组询问$(l,r,x)$,我们在主席树上询问第$l$棵树$-$第r$+1$棵树中与$s ...
- "|",“.”,"include"在jade中的用法(原样输出)
我们知道, body --><body> abc --><abc></abc> --></body> 如果我们想直接输入内容怎么办呢: ...
- (转) Linux(Centos7)yum安装最新mysql
原文:http://blog.csdn.net/gebitan505/article/details/54613549 环境 CentOS 7.1 (64-bit system) MySQL 5.6. ...