Luogu P5168 xtq玩魔塔】的更多相关文章

这题不错啊,结合了一些不太传统的姿势. 首先看到题目有一问从一个点到另一个点边权最小值.想到了什么? 克鲁斯卡尔生成树+倍增?好吧其实有一个更常用NB的算法叫克鲁斯卡尔重构树 (不会的可以看dalao's blog,并且可以尝试切掉Luogu P4768 [NOI2018]归程) 回到这题,我们可以把重构树建出来之后直接求两点LCA的权值. 然后对于第三问,考虑继续利用重构树,我们发现此时能走到的点在树上一定是一颗子树. 子树内DFS序连续啊,所以就变成区间数颜色了,直接莫队啊! 好吧还有修改,…
P5168 xtq玩魔塔 又是码农题- 利用克鲁斯卡尔重构树的性质 我们就可以得出 \(dep\) 值小的,肯定比 \(dep\) 大的值要优. 于是第二问就可以直接 LCA 求出来了- 至于第三问,dfs序一下,然后求子树-考虑莫队 修改直接带修莫队,没了. #include <bits/stdc++.h> using namespace std ; int min(int x , int y) { return x < y ? x : y ; } void swap(int &…
传送门 其实就是板子--只要会克鲁斯卡尔重构树和带修莫队就可以了 这么想着的我就调了将近一个下午-- 思路其实比较清晰,然而码量很大,细节贼多-- 不难看出只在最小生成树上走最优,于是建出克鲁斯卡尔重构树,\(2\)操作直接倍增跳,\(1\)操作和\(3\)操作离线,把克鲁斯卡尔重构树用\(dfs\)序转化为序列之后用带修莫队做 然后--注意细节--这是我的肺腑之言-- //minamoto #include<bits/stdc++.h> #define R register #define…
Description 给定一个 \(n\) 个顶点,\(m\) 条边的无向联通图,点.边带权. 先有 \(q\) 次修改或询问,每个指令形如 \(\text{opt}\ x\ y\): \(\text{opt}=1\):将顶点 \(x\) 的点权修改为 \(y\): \(\text{opt}=2\):查询顶点 \(x, y\) 间所有路径中路径上最大值中,最小的哪一个最大值(瓶颈路). \(\text{opt}=3\):查询顶点 \(x\) 可以结果边权 \(\le y\) 的边能到达的所有点…
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2465 题目描述 由于前两次的打击,ZYJ同学不再喜欢密码学,他喜欢上了游戏.某一 天,他要玩魔塔这个游戏,游戏规则是这样的,游戏地图的大小为N*M,一开始,ZYJ处于(0,0)点,ZYJ想去(N-1,M-1)点.但是通往目标的 路上有很多妖怪,每个妖怪都会打掉ZYJ不同数量的血量.现在ZYJ希望能够耗费最少的血量到达目的地. 但是他必须遵循以下规则:…
今天我在 GitHub 摸鱼寻找新的"目标"时,发现了一个开源项目是 RougeLike 类的角色扮演游戏「破碎版像素地牢」(Shattered Pixel Dungeon)类似魔塔的游戏. 游戏简介:一个 RougeLike 类 RPG 游戏,以像素风.多样性为特色,游戏中每场探险都独一无二,每次开局都有新的乐趣.游戏拥有 4 个可选角色,而且会随机生成关卡和敌人,超过 150 种可供收集并使用的道具,支持中文.苹果和安卓手机.游戏操作简单但想通关游戏不是件容易的事情. 嘿,看起来不…
题目描述 Alice 和 Bob 又在玩游戏. 对于一次游戏,首先 Alice 获得一个长度为 ​ 的序列 ​,Bob 获得一个长度为 ​ 的序列 bb.之后他们各从自己的序列里随机取出一个数,分别设为 ​,定义这次游戏的 ​次价值为​. 由于他们发现这个游戏实在是太无聊了,所以想让你帮忙计算对于 ​一次游戏​ 次价值的期望是多少. 由于答案可能很大,只需要求出模 ​下的结果即可. 输入输出格式 输入格式: 第一行两个整数 ​,分别表示 Alice 和 Bob 序列的长度. 接下来一行 ​ 个数…
看见这个题依稀想起了$5$月月赛时候的事情,到现在仍然它感觉非常神仙. 游戏$k$次价值的期望答案 $$ans_k = \frac{1}{nm}\sum_{i = 1}^{n}\sum_{j = 1}^{n}(a_i + b_j)^k$$ 二项式定理展开 $$ans_k=\frac{1}{nm}\sum_{i = 1}^{n}\sum_{j = 1}^{m}\sum_{t = 0}^{k}\binom{k}{t}a_i^tb_j^{k - t}$$ $$ = \frac{1}{nm}\sum_{…
BZOJ 4443 二分答案 + 二分图匹配 外层二分一个最小值,然后检验是否能选出$n - k + 1$个不小于当前二分出的$mid$的数.对于每一个$a_{i, j} \geq mid$,从$i$向$j + n$连一条边,然后跑二分图最大匹配即可. 菜的很,二分图匹配都写不对…… 注意数组要开到双倍$n$. 时间复杂度$O(nmlogn)$. Code: #include <cstdio> #include <cstring> using namespace std; ; ;…
行列看成点,格子看成边,二分一个边权,删去大于它的边,新图上的最大流>k则答案可以更优,小于k则调整左边界. #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<queue> using namespace std; inline int rd(){ ,f=;char c; :; +c-',c=getchar(); return…