[九省联考 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\)),定义一个选择 ...
随机推荐
- Eclipse ADT 代码注释模版
具体怎么用: 将下面的内容拷贝出来保存为XML文件,进入,Eclipse :Window --> Java --> Code Style --> Code Templates-> ...
- LeetCode143:Reorder List
题目: Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must d ...
- dorado-menu
1.menu控件是一个下拉菜单控件,可以设置数icon(图标),click事件,Dorado事件中都有self和arg两个参数,其中self是当前控件本身 2.menu控件可以和toolBar结合使用 ...
- C#调用C++库知识点
DllImport方式: CharSet属性:Ansi短字节和Unicode长字节 CallingConvention属性:Cdecl清理和被调用方清理堆栈 EntryPoint属性:定位函数入口.如 ...
- CSS2.1SPEC:视觉格式化模型之包含块
原汁原味的才是最有味道的,在阅读CSS标准时对这一点的体会更加深刻了,阅读文档后的一大感觉就是很多看上去理所应当的样式表现也都有了对应的支持机制.本文首先从包含块写起,一方面总结标准中相应的阐述,并且 ...
- Java中的String,StringBuilder,StringBuffer的区别
这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > ...
- Day 25 多态.
一.多态的概念 多态指的是一类事物有多种形态.动物有多种形态:人,狗,猪 from abc import ABCMeta,abstractmethod class Animal(metaclass=a ...
- ASP.NET Core获取客户端IP地址
1.在ConfigureServices注入IHttpContextAccessor // ASP.NET Core 2.1的注入方式 //services.AddHttpContextAccesso ...
- Backtracking-401. Binary Watch
A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom ...
- 【javascript】iOS Safari 中点击事件失效的解决办法
问题描述 当使用委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. ...