
堆
LowestJN
强省弱OIer
展开
-
[BZOJ2333][SCOI2011][可并堆]棘手的操作
题意有N个节点,标号从1到N,这N个节点一开始相互不连通。第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x v: 将第x个节点的权值增加v A2 x v: 将第x个节点所在的连通块的所有节点的权值都增加v A3 v: 将所有节点的权值都增加v F1 x: 输出第x个节点当前的权值 F2 x: 输出第x个节点所在的连通块中原创 2017-02-07 12:22:58 · 651 阅读 · 0 评论 -
[BZOJ4003][JLOI2015][可并堆]城池攻占
对于每个点维护一颗左偏树,最开始这棵树只包含从这个点出发的人。 可以按拓扑序枚举,枚举到一个点,把它的左偏树和所有儿子的左偏树合并(因为是左偏树,所以合并复杂度是logn),把战斗力小的弹出。至于修改打两个标记就好了。#include <cstdio>#define N 300010typedef long long ll;struct tree{ ll taga,tagb,w;原创 2017-02-03 16:04:07 · 462 阅读 · 0 评论 -
[树的同构][二分][可并堆维护哈希] LOJ#6066 || BZOJ4928 && 2017 山东一轮集训 Day3. 第二题
这题一看就可以二分 那么解决这题的关键就变成了怎么对树进行哈希,以及怎么快速维护哈希值 想了一个下午想了一个比较靠谱的哈希方法。 用一个p进制数(p>n且为质数)来表示每一个节点,这个数有depth位,depth位这个节点的深度,那么这个数在p进制下第i位表示这个点的depth-i的祖先是其父亲的第几个儿子。 大概长这样 子树中所有节点的哈希值之和作为这个子树的哈希值。 因为每个哈希值的原创 2017-07-11 18:07:31 · 970 阅读 · 0 评论 -
[k短路 && 可持久化堆]HDU5960.Subsequence
如果只求最大价值,显然可以DP fi,jf_{i,j} 表示前 ii 个点,最后一个点的颜色是 jj 的最大价值但是要求第k大的 把每个状态建成点,转移建成边,那么就构成一张图 求第k大就直接套可持久化堆的k短路算法就好了#include <cstdio>#include <iostream>#include <algorithm>#include <queue>#define fi原创 2017-09-27 13:35:33 · 1021 阅读 · 0 评论 -
[堆 折线] Codeforces713C. Sonya and Problem Wihtout a Legend
CF题解 很妙啊#include <cstdio>#include <iostream>#include <algorithm>#include <queue>using namespace std;typedef long long ll;const int N=3010;int n,c;ll ans;priority_queue<int> Q;int main(){ freopen原创 2017-12-14 20:11:00 · 347 阅读 · 0 评论 -
[堆 折线] UOJ#205 & BZOJ4585 【APIO2016】Fireworks
大概是一个子树中的 fxf_x 是一个单峰函数,转折点用可并堆维护具体看这里#include <cstdio>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int N=1200010;int n,m,cnt,fa[N],G[N];struct edge{ int t原创 2017-12-14 20:13:12 · 476 阅读 · 0 评论