• 22年多校第三场(F的证明


    F题
    题意:给定一个无向图,每次询问两点x, y,求是否存在一个n的排列,使得第一个元素为x,最后一个元素为y,且排列的任意一个前缀、任意一个后缀都连通。
    解法
    (发现还不会点双,赶紧入门了一下图论555
    不难想到割点相关的东西,不过只是部分东西qaq
    此题应该有点双性质入手
    乱分类讨论一下
    如果uv在同一点双,由点双性质,删任意点都能保持联通,所以直接yes。
    如果uv在不同点双,且一共两个点双且相邻。(先不考虑不连通情况)。
    也是可以构造排列 p 1 p 2 . . . p n p_1p_2...pn p1p2...pn的,其中 p 1.. p i p1..pi p1..pi属于一个点双, p i + 1 . . . p n p_{i+1}...pn pi+1...pn属于另一个, u = p 1 , v = p n u=p_1,v=p_n u=p1,v=pn
    如果有更多点双考虑怎么构造,用点双缩点后,是一棵树。因为uv必须在数组的头尾,这棵树必须是链的形式,uv所在的点双必须在链的头尾。结论感觉挺好想的。
    反证法乱证下这棵树是条链:
    假设不是链,那至少有三个叶子,设uv所在的点双分别为U,V(U≠V),另一个叶子为T。不妨设U与T的lca为LCA,我们先将UV的路径构造到排列p中,
    p 1 . . . p i 对应的是 U − > L C A 这条路径上的点双 p_1...p_i对应的是U->LCA这条路径上的点双 p1...pi对应的是U>LCA这条路径上的点双 p i + 1 . . . p n 对应的是 U − > L C A 这条路径上的点双 p_{i+1}...p_n对应的是U->LCA这条路径上的点双 pi+1...pn对应的是U>LCA这条路径上的点双,(省略处不代表是一串连续的下标)
    此时还剩T->LCA这条路径上的点双没加入到排列中,考虑如果路径中只有T和LCA两个点,怎么去构造。
    由于一个点可能同时属于多个点双,假设点双LCA中连接U,连接T的那个点(LCA,U,T是一个点集!)同时属于LCA,U和T(但是缩点的时候只能暂时被放在一个集合里,假设现在在LCA这个集合),因为这种情况能增加点双之间的连通性,从而更容易构造排列(表达能力不佳qaq),我们设这个关键点为k点。
    在这里插入图片描述
    现在U到V这条路径已经安置在排列中了,考虑加入T。考虑让排列的前缀保持连通性,那一个最优方法就是加入k后,就去放T里的点,假设k后面接上一个T中的点q,我们再看排列后缀,此时后缀V到T条路径是不连通的,因为k在q前面!!!
    那么推理到更坏情况更构造不出来了!
    证毕

    如果uv所在的点双在头尾的话,还要特判一下uv是割点的情况。毕竟以上只能保证构造出uv分离的排列,还要保证uv间的连通性。
    注意特判n=2的情况,始终是yes。

  • 相关阅读:
    【git】一台电脑连接管理多个git账号
    STM32内部Flash的使用
    数据库 varchar 类型应该设计多长?
    LeetCode每日一题——1774. 最接近目标价格的甜点成本
    C语言实现输入一行字符统计其中有多少个单词,单词之间用空格分隔开
    相控阵天线(六):直线阵列特殊综合方法(变形泰勒综合法、贝利斯综合法、伍德沃德抽样法)
    Tomcat服务部署
    k8s配置文件数据存储:ConfigMap
    iOS查看汇编代码
    【OpenCV实现图像:使用OpenCV进行物体轮廓排序】
  • 原文地址:https://blog.csdn.net/m0_53688600/article/details/125985408