/* 返回顶部 */
摘要: 传送门 这道题可以用分治的方法解决。(lbgxld说是线段树,但是我觉得分治快而且好写...) 暴力枚举是$O(n^2)$,想要优化,就不能一对一对枚举,最好能用一只奶牛一次计算一群其他的贡献。 这就需要考虑听力$v$和坐标大小$x$的关系,可以把它转化为一个二维偏序问题。 首先把听力$v$从大到小 阅读全文
posted @ 2019-05-29 14:18 Mogeko 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 传送门 求一棵生成树,使它的最大边权与最小边权之差最小。 假设已经求出了一棵最小生成树,它的最小边权一定是图上所有边中最小的;它的最大边也应该是相对最小的。 也就是说,不改变当前最小边,它的边权差只能变大,答案不可能变得更优了。 那么想要答案更新,只可能是最小边变大,最大边也变大。 那么删去最小边, 阅读全文
posted @ 2019-05-28 19:46 Mogeko 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 传送门 这道题的正解贪心思路我看了题解.... 给出点对的先后次序,很容易想到拓扑排序。 但是如果按字典序排序,就会遇到较小的就放在前面, 可以举出反例:4种菜肴,限制为<2,4><3,1>, 那么字典序最小的是2,3,1,4,但正解应为3,1,2,4. 因为按字典序排序只能按前一个点排,不能知道后 阅读全文
posted @ 2019-05-28 02:53 Mogeko 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 传送门 在图上进行一次买,一次卖,使最后的获利最大。 可以看出,在一个节点x上,有两种选择:不买卖;买(当前没买)或卖(当前买了)。 把没买的状态记为状态x1,买了记为状态x2,买完又卖了记为状态x3。 在每个点上,可以由x1转到x2,x2转到x3,并且操作是一次性的。 考虑分层最短路,dis[x] 阅读全文
posted @ 2019-05-27 23:59 Mogeko 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 传送门 求一棵最小生成树,要求:忽略树上s-1条边的边权后,最大的边最小。 (因为卫星频道是两两互达的,所以想把连接两个联通块之间的边权忽略必须用两个联通块都放置卫星频道。也就是至少要两个) emmm...其实我本来想的是分层最短路那种动态规划,记录用了几次忽略机会。 假设已经求出答案最小生成树,忽 阅读全文
posted @ 2019-05-23 20:15 Mogeko 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 传送门 要使n个农场从其他农场引水,或自己打井。 对于每个农场,最小花费为与min(自己打井,min(与其他农场连接)); 当然,至少有一个农场打井。 这样选择后,得到了若干个联通块,每个块中有一个农场打井。 那么可以看出,每个农场需要直接或间接与水源相连。 把水源看作一个中转节点(虚根),每个农场 阅读全文
posted @ 2019-05-23 19:52 Mogeko 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 传送 分层最短路。 可以发现,需要做出选择的地方只有地铁站,所以点集就是所有地铁站。 所有相同x坐标地铁站之间纵向连边,点编号1~n,y相同地铁站之间纵向连边,编号n+1~2n, 边权为x或y坐标差值*2。 在每个地铁站可以选择换乘或者不换乘,如果换乘,花费为1,坐标由i变成i+n(或i-n)。 所 阅读全文
posted @ 2019-05-22 14:55 Mogeko 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 传送 gg给的题解 这道题的k很小,把k看作一种状态,可以考虑用分层的方法解决。 把每个点分成k个,dis[x][k] 代表使用了k次免费机会,到达x的最短距离。 从u到v,可以不使用免费机会,费用为val,或者使用免费机会,边权为0。 那么连边的时候,每条边实际要连2*(k+1)条:(i = 0~ 阅读全文
posted @ 2019-05-21 20:34 Mogeko 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 前往>>暴风城 第一次写SPFA!(惭愧 对于某个怪兽,杀死它的最小消耗 = min(它的魔法消耗,它的物理消耗 + 杀死它所有儿子的消耗) 可以看出,一个点可能被它的儿子更新,并且可能去更新它的父亲。 考虑用最短路解决这道题,从一个假设的起点0出发,要求它到1的最短距离。1~n每个点的距离初始应为 阅读全文
posted @ 2019-05-16 20:17 Mogeko 阅读(184) 评论(0) 推荐(0) 编辑
摘要: (他羊) Tarjan是一种dfs算法。 有向图的强联通分量 如果一个有向图的子图中,任意两点可以相互到达,那么这就组成了一个强联通分量。 在Tarjan算法中,需要维护一个栈stk, 每个节点有两个值:dfn[],即dfs序;low[],表示这个节点最多经过一条横叉边能到达的dfn最小的点的dfn 阅读全文
posted @ 2019-05-04 17:07 Mogeko 阅读(215) 评论(0) 推荐(0) 编辑