题目描述 化学家吉丽想要配置一种神奇的药水来拯救世界.吉丽有n种不同的液体物质,和n个药瓶(均从1到n编号).初始时,第i个瓶内装着g[i]克的第i种物质.吉丽需要执行一定的步骤来配置药水,第i个步骤是将第a[i]个瓶子内的所有液体倒入第b[i]个瓶子,此后第a[i]个瓶子不会再被用到.瓶子的容量可以视作是无限的.吉丽知道某几对液体物质在一起时会发生反应产生沉淀,具体反应是1克c[i]物质和1克d[i]物质生成2克沉淀,一直进行直到某一反应物耗尽.生成的沉淀不会和任何物质反应.当有多于一对可以发…
[BZOJ3712]Fiolki(并查集重构树) 题面 BZOJ 题解 很神仙的题目. 我们发现所有的合并关系构成了一棵树. 那么两种不同的东西如果产生反应,一定在两个联通块恰好联通的时候反应. 那么,我们按照并查集的合并顺序,类似于克鲁斯卡尔重构树的方法构建一个并查集重构树, 发现所有的反应恰好在两者的\(LCA\)处发生, 所以把所有可以发生的翻译拿出来, 按照\(LCA\)的深度为第一关键字,反应的优先级为第二关键字排序. 然后按顺序依次计算答案就好了. #include<iostream…
Kruskal 重构树 [您有新的未分配科技点][BZOJ3545&BZOJ3551]克鲁斯卡尔重构树 kruskal是一个性质优秀的算法 加入的边是越来越劣的 科学家们借这个特点尝试搞一点事情. kruskal求最小生成树的过程,如果把加入的一个边新建一个节点的话,并且把k1,k2的father设为新点的话,会得到一个2*n大小的树 实际上已经非常明白地表示kruskal这个过程了.这个树叫kruskal重构树 每个点的权值定义为所代表的边的权值.叶子节点权值最优. 由于贪心,所以树上所有点,…
description 题面 data range \[ 0\le m<n\le 200000,0\le k\le 500000\] solution 之前本人一直煞笔地思考暴力是否可行 考虑按照操作关系直接构树,之后按照每个反应中两点在树上的\(lca\)深度排序 最后依次考虑每个反应即可 虽然说建出来的也是个\(Kruskal\)重构树 code 没有按质合并的并查集都能过 #include<bits/stdc++.h> #include<algorithm> #incl…
居然是一道图论题 毫无思路 我们对于每一次的融合操作 $(a,b)$ 建一个新点$c$ 并向$a,b$连边 再将$b$瓶当前的位置赋成$c$ 这样子我们就可以建成一个森林 现在枚举每一种反应$M_i$ 看他在森林里是否存在$lca$ 存在就相当于会在$lca$处发生反应 因为有反应的顺序 我们对$lca$排序后先做$lca$深度大的 深度相同就先做$M$的$id$小的 这样就满足题意了 我交了半天 居然是因为倍增数组写错了 真菜o(╥﹏╥)o #include<bits/stdc++.h> u…
克鲁斯卡尔重构树 又叫并查集重构树 大概在NOI2018之前还是黑科技 现在?烂大街了 主要是针对图上的对边有限制的一类问题 比如每次询问一个点u不能经过边权大于w的边能走到的第k大点权是多少 也就是这个题peaks 首先肯定是一个最小生成树(如果不知道为什么还可以先做货车运输) 我们在并查集合并的时候稍作修改 每次不是fa[x]=y而是fa[x]=fa[y]=++tot 这样相当于新建了一个点连接两棵树,tot的点权根据题目需要确定 peaks这题点权就是所连边的边权 我们发现这样子构出来的树…
3712: [PA2014]Fiolki Time Limit: 30 Sec  Memory Limit: 128 MB Description 化学家吉丽想要配置一种神奇的药水来拯救世界.吉丽有n种不同的液体物质,和n个药瓶(均从1到n编号).初始时,第i个瓶内装着g[i]克的第i种物质.吉丽需要执行一定的步骤来配置药水,第i个步骤是将第a[i]个瓶子内的所有液体倒入第b[i]个瓶子,此后第a[i]个瓶子不会再被用到.瓶子的容量可以视作是无限的.吉丽知道某几对液体物质在一起时会发生反应产生沉…
原文链接https://www.cnblogs.com/zhouzhendong/p/NOI2018Day1T1.html 题目传送门 - 洛谷P4768 题意 给定一个无向连通图,有 $n$ 个点 $m$ 条边,每条边有两个属性:海拔$(a)$.距离$(l)$. 有 $Q$ 组询问,每组询问两个数 $v,p$,表示询问从点 $v$ 出发,从第一次走海拔高度不超过 $p$ 的边起算,问行走距离最小为多少.(即,在第一次走海拔高度不超过 $p$ 的边之前,走的所有边都是免费的) $T$ 组数据,强…
解法一: 1.首先想到离线做法:将边和询问从大到小排序,并查集维护连通块以及每个连通块中所有点到1号点的最短距离.$O(n\log n)$ 配合暴力等可以拿到75分. 2.很容易想到在线做法,使用可持久化并查集,询问时二分即可. 不能使用路径压缩,应该按秩合并,注意秩是树的深度而不是大小.$O((E+Q)\log^2 N)$ 由于常数过大,基本过不去. 3.考虑优化算法二,发现访问历史版本并不需要修改而只需要询问,所以一开始只使用普通的并查集,用可持久化数组记录并查集的修改情况. $O((N+E…
神仙题. 先考虑平方级别的暴力怎么做. 明显答案有单调性,先二分 \(c\). 先最短路预处理 \(dis_u\) 表示 \(u\) 到离它最近的充电站的距离(一开始把 \(1\) 到 \(k\) 全部丢到优先队列里就行了). 考虑当前站在 \(u\) 点上时,剩余的电量是 \(x\).注意到由于起点是充电站,就一定有 \(x\le c-dis_u\)(考虑最后一个走到的充电站沿最短路走到这) 如果 \(x<dis_u\),因为终点是充电站,肯定不可能再到终点. 否则就可以走到最近的充电站再回来…