首页 > 其他分享 >2.29闲话 & solution 『任无数/花开花落之后/你仍君临芸芸众生』

2.29闲话 & solution 『任无数/花开花落之后/你仍君临芸芸众生』

时间:2024-02-29 21:27:11浏览次数:26  
标签:花开花落 LCT Cut 边权 solution 2.29 Link link 节点

明天就省选了,我咋啥也不会


最破防的一集

一道LCT调了一下午没调出来

最后发现是 minmax 取反了

改完之后发现自己的访问有问题,如果有 0 边权我就会直接返回LLONG_MAX

啊哈哈,我调了一下午,发了7个帖子

然后校内OJ过了,POJ因为只有C++98所以 CE 了

哈哈哈

image
image

写个简要题解吧

  • [POJ3237] 树的维护

    这道题与一般的 LCT 似乎有一点不同

    给的不是点权,那怎么办呢

    错误思考示范

    诶树剖的时候好像也有这个问题,是不是可以参考树剖

    用儿子节点记录其到其父亲的边权,然后云云

    但是这样有个问题,就是说 LCT 使用 splay 维护的,splay 是会破坏原本的父子关系的

    那么这个做法宣告破产了wwwww

    根据 FalshHu 的讲解,我们可以得知有两种解法

    1. 把边置于 LCT 外,然后在 LCT 节点中维护父边和重子边的编号,需要更新信息时从外部获取

      但是这种方法有一个问题:需要在access操作,Link操作,Cut操作都进行修改,很麻烦

    2. 建立额外的节点

      我们可以建立额外的表示的节点,然后把表示点的节点的权值都设为\(0\)

      这样我们就可以把原本的边权转化为点权来让 LCT 去维护

      此时普通的 LinkCut 都存在一些问题

      LinkCut 操作只能添加/删除一条边,而不能删除代表边权的边

      解决方法也很简单,直接 Link/Cut 两次即可

      • 核心代码

        link(a[i].x,a[i].id);
        link(a[i].id,a[i].y);
        

    我们通常选择建立代表边的节点,也就是第二种方法

    在本题中建立边的方式如下

    for(int i=1;i<n;++i){
        FastI>>x>>y>>val[i+n];
        link(x,i+n);
        link(y,i+n);
    }
    

    这里的求 max 后取反如何维护呢?我们发现只要取 min 即可,这样取相反数后的结果就是 max

    那么这道题就非常容易的做出来了

标签:花开花落,LCT,Cut,边权,solution,2.29,Link,link,节点
From: https://www.cnblogs.com/Vsinger-LuoTianYi/p/18045497

相关文章

  • 闲话2.29
    今天其实大部分东西都在这里写过了,这里放一点娱乐性质的东西。6t玩owo还没出H......
  • P10202 [湖北省选模拟 2024] 沉玉谷 Solution
    好像比题解劣一个\(n\),但是也跑的很快。首先说明,问题等价于计算有多少种本质不同的方案使得整个序列被删完,证明省略。考虑用区间的方式表述这些操作,具体的,忽略删除后的移位操作,将每次删除的左右段点视为一个区间,则一定会有:区间的并是\([1,n]\)。区间之间要么不交,要么包含。......
  • 2024.02.29
    今天主要将昨天没开发完的前端vue模板补全,然后学习了vue结合springboot完成前后端数据交互(封装axioshttp请求工具JS)Json数据vue模板<template><div><el-container><!--侧边栏--><el-aside:width="asideWith"style="min-height:100vh;backgro......
  • 2.29每日学习
    单位集美大学在Python3.x中可以使用中文作为变量名。TF1-2分数2作者郭晓曦单位集美大学Python变量使用前必须先声明,并且一旦声明就不能在当前作用域内改变其类型。TF1-3分数......
  • solution-P1667(more)
    这道题,我不会做,我就是菜,我就是没水平,我就是傻逼。这道题,我不会做,我就是菜,我就是没水平,我就是傻逼。这道题,我不会做,我就是菜,我就是没水平,我就是傻逼。正文直接前缀和,发现操作相当交换\(s_{i-1},s_j\),显然最后我们只需要让\(s\)单调上升即可。直接做,找有多少个环,答案为\(n......
  • 2.29每日总结
    今天课上学习了软件测试的知识在软件开发过程中,测试是一个非常重要的环节。通过测试可以有效地发现程序中的缺陷和bug,并提前解决这些问题,从而保证软件的质量和稳定性。软件测试根据不同的目的和方法可以分为多种类型,下面我们来看一下软件测试的分类。1.功能测试功能测试......
  • niu-zi-solution
    牛子Solutionlink结论:一个方案合法当且仅当,每行数种类为\(2\),或者每列数种类为\(2\)。证明:我们试图证明,如果一个方案存在一行的数种类\(\ge3\),则这个方案的每列数种类为\(2\)。对于有\(\ge3\)种数的这一行,必然存在某连续的三个数两两不同,即形如abc的形式。这个可以......
  • cf1748f-solution
    CF1748FSolutionlink题目也就是要我们交换每对\(a_i\)和\(a_{n-1-i}\)。考虑如何利用这个异或操作交换:我们自然地想到x^=y,y^=x,x^=y。如何操作使得x^=y?我们把环上\(x\)到\(y\)的路径拉出来,假装是个序列:\(a_x.a_{x+1},a_{x+2},\dots,a_{y-2},a_{y-1},a_y\)现在要使......
  • cf1621g-solution
    CF1621GSolutionlink考虑对每个位置\(i\)作为\(i_j\)时计算贡献。\(i\)对一次答案有贡献当且仅当:设其子序列内最右端的位置为\(r\),则要满足\(r\)右侧存在一个数大于\(a_{i}\)。即,设\(lst_i\)表示整个序列最右侧的大于\(a_i\)的数,要满足\(lst_i>r\)。现......
  • cf1606e-solution
    CF1606ESolutionlink考虑dp。注意到这个题造成的伤害与剩余人数有关,每次消灭的人数又与剩余人的血量最大值有关:设\(dp_{i,j}\)表示剩下\(i\)个人中血量最大值为\(j\)的方案数。显然当\(i-1>=j\)时一次伤害就可以杀光所有人,于是这时\(dp_{i,j}=j^i-(j-1)^i\)(只需让......