BZOJ3669 膜法森林 - LCT】的更多相关文章

Solution 非常妙的排序啊... 仔细想想好像确实能够找出最优解QUQ 先对第一关键字排序, 在$LCT$ 维护第二关键字的最大值 所在的边. 添边时如果$u, v$ 不连通 就直接加边.  如果连通 并且路径上的最大值 大于 当前边 的 第二关键字, 那么可以换掉. 如果 $1$ 和 $N$ 连通 就 更新答案. 这样就可以保证 在 所有路径上的边 第一关键字 小于等于 当前边 的第一关键字的前提下, 第二关键字的 最大值  最小. 除了这一点不一样, 其他就是模板了. Code #in…
先上题目 bzoj3669: [Noi2014]魔法森林 这道题首先每一条边都有一个a,b 我们按a从小到大排序 每次将一条路劲入队 当然这道题权在边上 所以我们将边化为点去连接他的两个端点 当然某两个点我用的是并查集维护 其实也可以在树上直接查询 但是这样比较方便 同时我们维护某个点极其子树的最大值所在的位置 每入一条边 如果两个端点已经联通就找出权值的边删掉之后连上新的边顺便更新答案 如果没联通就直接连上边就好 这样就解决问题了 #include<cstdio> #include<c…
记得去年模拟赛的时候好像YY出二分答案枚举a,b的暴力,过了55欸 然后看正解,为了将两维变成一维,将a排序,模拟Kruskal的加边过程,同时维护1到n的最大值,加入一条边e(u,v,a,b)时有以下两种情况: 1) 若u,v已连通,则找出u->v上最大的b',若b<b',则替换之,同时更新答案,注意e一定经过1->n,因为去掉b'所在边时1,n一定不连通,若加上e后1,n连通,则必经过e,由于a是有序的,所以a是路径上最大的a,用a+MAX_b[1->n]更新答案即可. 2)否…
Brief description 给定一个无向图,求从1到n的一条路径使得这条路径上最大的a和b最小. Algorithm Design 以下内容选自某HN神犇的blog 双瓶颈的最小生成树的感觉,可以首先按a值排序,然后一条边一条边的加入. 如果之前连接的两点还未连通,那么连上先满足最后连通性的必要. 如果之前连接的两点已经连通,那么就在原来的路径上找到一条b值最大的,然后删掉原来的,加上现在的边,保证最优性的需要. 这样会导致最大的b值的减小,但是如果之前1,n已经连通,也会造成最大的a值…
题面 一开始看到这道题虽然知道是跟LCT维护最小生成树相关的但是没有可以的去想. 感觉可以先二分一下总的精灵数,但是感觉不太好做. 又感觉可以只二分一种精灵,用最小生成树算另一种精灵,但是和似乎不单调. 然后就可以自然地想到先把边按\(a\)从小到大加入,用LCT维护最小生成树,直接更新答案即可. #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #define RE…
判断整除 总时间限制: 1000ms 内存限制: 65536kB [描述] 一个给定的正整数序列,在每个数之前都插入+号或-号后计算它们的和.比如序列:1.2.4共有8种可能的序列:(+1) + (+2) + (+4) = 7(+1) + (+2) + (-4) = -1(+1) + (-2) + (+4) = 3(+1) + (-2) + (-4) = -5(-1) + (+2) + (+4) = 5(-1) + (+2) + (-4) = -3(-1) + (-2) + (+4) = 1(-…
[luogu3767]膜法 luogu 神仙题 线段树分治+带权并查集 把每个操作看成点 首先这个操作的结构是一棵树 你发现每个点的对它的子树产生影响 我们可以想到用dfn序把它转成一段区间用线段树分治来做 但是还有删除操作,相当于在一个大区间里面挖掉几个小区间 可以对每个操作开一个vector记录区间搞一搞 然后带权并查集是模5意义下的,可以认为给你的操作相当于从u连向v的一条权值为1或2的边 当u,v在同一个集合时,判断是否满足条件,否则就连边 #define pb push_back #d…
终于不是裸的LCT了...然而一开始一眼看上去这是kruskal..不对,题目要求1->n的路径上的每个点的两个最大权值和最小,这样便可以用LCT来维护一个最小生成路(瞎编的...),先以a为关键字排序,然后加边,所以每次加入一条边时a一定是最大的,考虑b的大小,当形成环时,考虑用当前边替换掉环内b最大的边,当然是当前边b小于权值最大的边拉! Tips:1.注意LCT要把每条边也作为一个节点,方便连接,然后每个节点维护所在边在边集里的编号即可. #include <iostream> #…
题目描述 给你一个\(n\)个点\(m\)条边的图,每条边有两个边权\(a,b\).请你找出从\(1\)到\(n\)一条路径,使得这条路径上边权\(a\)的最大值\(+\)边权\(b\)的最大值最小. \(n\leq 50000,m\leq 100000\) 题解 我们可以考虑求出当边权\(a\leq\)某个数时边权\(b\)的最大值. 先把边按边权\(a\)从小到大排序,依次加入,用LCT维护当前边权\(b\)的最小生成树.如果这两个点已经联通,就判断这两个点路径上边的边权\(b\)的最大值,…
题目描述 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节点1,隐士则住在号节点N.小E需要通过这一片魔法森林,才能够拜访到隐士. 魔法森林中居住了一些妖怪.每当有人经过一条边的时候,这条边上的妖怪就会对其发起攻击.幸运的是,在号节点住着两种守护精灵:A型守护精灵与B型守护精灵.小E可以借助它们的力量,达到自己的目的. 只要小E带上足够多的守护精灵,妖怪们就不会发起攻击…