洛谷P2387 [NOI2014]魔法森林(LCT)】的更多相关文章

魔法森林 题目传送门 解题思路 把每条路按照\(a\)的值从小到大排序.然后用LCT按照b的值维护最小生成树,将边按照顺序放入.如果\(1\)到\(n\)有了一条路径,就更新最小答案.这个过程就相当于枚举了每一个\(a\)作为最大的\(a\),然后求出了其对应的最小\(b\)的最大值. 代码如下 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 300005; int fa[N],…
P2387 [NOI2014]魔法森林 题目描述 为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐 士.魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为 1,2,3,-,n,边标号为 1,2,3,-,m.初始时小 E 同学在 1 号节点,隐士则住在 n 号节点.小 E 需要通过这一片魔法森林,才能够拜访到隐士. 魔法森林中居住了一些妖怪.每当有人经过一条边的时候,这条边上的妖怪 就会对其发起攻击.幸运的是,在 1 号节点住着两种守护精灵:A 型守护精灵与…
题目描述 为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐 士.魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为 1,2,3,…,n,边标号为 1,2,3,…,m.初始时小 E 同学在 1 号节点,隐士则住在 n 号节点.小 E 需要通过这一片魔法森林,才能够拜访到隐士. 魔法森林中居住了一些妖怪.每当有人经过一条边的时候,这条边上的妖怪 就会对其发起攻击.幸运的是,在 1 号节点住着两种守护精灵:A 型守护精灵与 B 型守护精灵.小 E 可以借助它们的力…
在XZY&XZZ巨佬的引领下,一枚蒟蒻终于啃动了这道题...... 这次还是第一次写LCT维护边权,还要化边为点,思路乱七八糟的,写起来也不顺手,还好调了许久终于AC啦. 贪心排序按一个关键字从小到大枚举边,维护另一个关键字的最小生成树,这样的思路真是太巧妙啦.(然而没有题解的滋养我什么也干不了) 只是关于写法上面,我又有些和Dalao们不一样的地方(因为是自己乱写的). link和cut好像脱离了传统意义,本蒟蒻用了link(x)表示将编号为x的边加入用LCT维护的最小生成树,cut(x)反之…
在XZY&XZZ巨佬的引领下,一枚蒟蒻终于啃动了这道题...... 这次还是第一次写LCT维护边权,还要化边为点,思路乱七八糟的,写起来也不顺手,还好调了许久终于AC啦. 贪心排序按一个关键字从小到大枚举边,维护另一个关键字的最小生成树,这样的思路真是太巧妙啦.(然而没有题解的滋养我什么也干不了) 只是关于写法上面,我又有些和Dalao们不一样的地方(因为是自己乱写的). link和cut好像脱离了传统意义,本蒟蒻用了link(x)表示将编号为x的边加入用LCT维护的最小生成树,cut(x)反之…
[题解] 我们先把边按照$a$值从小到大排序,并按照这个顺序加边. 如果当前要加入的边连接的两点$u$与$v$已经是连通的,那么直接加入这条边就会出现环.这时我们需要删除这个环中$b$值最大的边.因此我们需要维护区间最大值,以及最大值的位置. 如果当前$1$与$n$已经连通,就更新$ans$,当前从$1~n$的代价是$ai+val[querymax(1,n)]$: 为了方便处理,我们可以把边开成点,即加边的时候多开一个表示这条边的点,在上面记录边权等信息. #include<cstdio> #…
\(\color{#0066ff}{ 题目描述 }\) 为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐 士.魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为 1,2,3,-,n,边标号为 1,2,3,-,m.初始时小 E 同学在 1 号节点,隐士则住在 n 号节点.小 E 需要通过这一片魔法森林,才能够拜访到隐士. 魔法森林中居住了一些妖怪.每当有人经过一条边的时候,这条边上的妖怪 就会对其发起攻击.幸运的是,在 1 号节点住着两种守护精灵:A 型守护精…
本题是运用LCT来维护一个最小生成树. 是一个经典的套路 题目中求的是一个\(max(a_i)+max(b_i)\)尽可能小的路径. 那么这种的一个套路就是,先按照一维来排序,然后用LCT维护另一维 那么这个对于这个题来说,我们考虑,可以先按照a从小到大排序,然后顺次加入每条边,这样每次加入的边一定是有可能会更新到\(ans\)的. 对于一条边\(u->v\),如果\(u\)和\(v\)不在一个联通块里面的话,那么就直接连上这个边,然后尝试更新答案 如果在同一个联通块里面呢,我们就判断\(u\)…
题面 传送门:https://www.luogu.org/problemnew/show/P2387 Solution 这题的思想挺好的. 对于这种最大值最小类的问题,很自然的可以想到二分答案.很不幸的是,这题是双关键字排序的,我们怎么二分呢? 先二分a再二分b?怎么看都布星啊. 那a+b作为关键字二分?也布星啊. 那咋搞啊? 不如,我们换个想法,我们把其中一个关键字枚举,再看在这个关键字的限制下,另外一个尽可能小. 仔细想想,应该是能覆盖到所有的情况的. 所以说,我们可考虑这样做:我们先枚举a…
题目大意:给定一个 N 个点,M 条边的无向图,边有两个边权 a, b,求从 1 号节点到 N 号节点路径的两个权值和的最大值最小是多少. 题解: 对于有两个属性的结构的最优化问题,可以考虑先按照其中一个分量进行排序.接着从小到大枚举这个有序的分量,计算以当前枚举到的值为这一分量的最大值时,全局的最优解是多少.因此,需要高效维护的是如何求出另一个分量的最优解. 对于这道题来说,考虑对 a 分量进行排序,并按从小到大的顺序依次加边.对于即将加入的第 i 条边来说,若加入这条边使得两个本来不联通的点…