zoukankan      html  css  js  c++  java
  • CC GRAPHCNT

    首先建出支配树,如果两个点有除了 1 以外的公共支配点那就废了。那么就猜想,仅有公共支配点 1 这个条件也是充分的,这样就相当于求 (mathrm{LCA}(x,y)=1)​ 的点对数量,就太简单了。网上所有题解都对这个猜想的证明一笔带过(不给证明写个铲铲的题解),仿佛很显然一样,我曾一度怀疑是不是世界上只有我一个人是弱智。后来找到了 CC 上的官方题解才发现确实挺难证的。

    下面通篇翻译(bushi)CC 官方题解,就当报复一下社会。


    之前做的支配树题最多是节点去截路径,这次是两条路径互刚了,所以在相邻两支配点之间走的路径交不交也是要考虑的。对支配树上相邻两个节点 ((x,y)),其中 (x)(y) 的最近支配点,我们来考察一下 (x o y) 所有可能的路径中所有可能的节点 (z) 有哪些:(z) 显然不被 (y) 支配,因为存在 (1 o x o z) 的不经过 (y) 的路径,所以 (z) 一定不属于子树 (y);而 (z) 又肯定被 (x) 支配,否则存在 (1 o z o y) 的不经过 (x) 的路径,与 (x) 支配 (y) 矛盾,所以 (z) 一定属于子树 (x)。总结下来就是 (z) 可能是 (operatorname{subtree}(x)-operatorname{subtree}(y)-{x})​ 中任意一个节点。这样对任意支配树上直链,它每一条边都是独立的一节,可以分开来分析。

    其实刚才挖的过深了。设 (1 o x)​​ 在支配树上为 (1=x_0 o x_1 ocdots o x_n=x)​​,(1 o y)​​ 为 (y_{0sim m})​​,则跟据上面的理论 (x_1 o x_n)​​ 的任意路径的任意节点都是 (x_1)​​​​ 的后代,(y_1 o y_m)​​ 也都是 (y_1)​​ 后代,而 (mathrm{LCA}(x,y)=1)​​,易知 (operatorname{subtree}(x_1)capoperatorname{subtree}(y_1)=varnothing)​​。所以 (x_1 o x_n,y_1 o y_m)​​ 这两条路径是永不相交的,接下来只需要考虑 (1 o x_1,1 o y_1)​​ 与之相交性。

    先尝试构造 (1 o x_1)​ 与 (y_1 o y_m)​ 不相交,那么必不经过 (y_1)​​​,而一旦不经过 (y_1)​,它也无法经过 (y_1)​ 支配的 (y_{2sim m})​,所以这就等价于要找 (1 o x_1)​ 不经过 (y_1)​。这就是节点刚路径,由于 (y_1)​ 不支配 (x_1)​,一定存在不经过 (y_1)​ 的 (1 o x_1)​ 路径。然后考虑找不交于 (1 o x)(1 o y_1)​ 路径,找到了就 win 了。

    现在先来扯一些其它事情:对两个不相邻的点 (x,y)​​​,如果 (x o y)​​​ 不存在必经点,那么必存在两条除端点外不相交的 (x o y)​​ 路径。回想起学点双、边双的时候双连通的两个等价定义:无必经边 / 点,以及存在两条没有交边 / 点的路径(两点一边的点双除外),当时在 blog 没有给出证明,想当然地认为很好证,仔细想想发现并不会从前者推出后者。其实有 / 无向图必经边 / 点问题专门有个定理叫门杰定理,是拓展版,内容是最小的割边 / 点集大小为 (k)​​ 当且仅当最多有 (k)​​​ 条互不相交路径。证明非常巧妙的运用最大流最小割定理,那么有向图就显然了,必经点可以点边转化;而无向图最大流、最小割看似不会做(当年还以为不可做来着 2333),其实都将无向边正反建两条边即可:最大流中易证一条边正反走两遍一定不是最优,最小割中一组割 ((S,T))​ 只要割掉 (S o T)​​ 的边的 (S o T) 方向有向边,恰与原无向边一一对应。

    扯完了,继续证明。由于 (1)​​ 最近支配 (y_1)​​,(1)​​ 和 (y_1)​​ 之间没有必经点。如果存在边 ((1,y_1))​​ 那就 win 了对不;否则必存在 (1 o y_1)​​​ 的两条除端点不相交路径,如果其中有一条跟 (1 o x)​​​ 不交那就 win 了,否则设两者与 (1 o x)​​ 交点按顺序分别为 (a_{1sim s},b_{1sim t})​​。不妨设 (a_s)​​ 比 (b_t)​​ 离 (1) 更远,那么我们可以先沿着第一条路径走到 (a_s) 之后沿原定 (1 o x) 路径后半段走到 (x) 作为新 (1 o x) 路径,然后走第二条路径作为 (1 o y_1),这样 (b_{1sim t})(1 o x) 上全部消失了,而 (a)(b)​ 又不交,证毕!​​

    珍爱生命,远离抄袭!
  • 相关阅读:
    MySQL-存储过程
    MySQL-触发器
    MySQL自学笔记
    arrayList和LinkedList区别
    RecyclerView和ListView比较
    【二叉树遍历】必知方式
    进程与线程的区别
    【单例模式】java实现
    【斐波那契数列】java探究
    replugin插件化,插件转场动画失效的问题解决
  • 原文地址:https://www.cnblogs.com/ycx-akioi/p/solution-cc-graphcnt.html
Copyright © 2011-2022 走看看