zoukankan      html  css  js  c++  java
  • ICPC2020南京

    A、B、C、D、I、J、M待更

    鸽掉的:G(感觉不太好讲,如果有思路但具体细节不太清楚可以私信交流,毕竟我认为这题坑点很多)

    D

    很有意思的题目

    首先(n=3)肯定是无解的,以下讨论(nge 4)的情况,也就是每个点能接受连两个点以上

    定义:对于一个割点,其的割度为将其的邻边从图中删掉后,增加的连通块个数

    结论:有解的充分条件是,不存在一个割点,使得其割度(>leftlfloorfrac{n}{2} ight floor)

    证明显然

    我们通过以下的方法证明这也是必要条件

    首先随便搜出一棵树,若其不存在一个点度数(>leftlfloorfrac{n}{2} ight floor),则显然合法
    否则,令该点为(root_1),令其为树根(显然树中最多存在一个这样的点)

    我们遍历其他所有边,若其为树的横叉边,则我们可以将其加入树中,并删掉树上的一条边,使(root_1)的度数(-1)
    直到(root_1)的度数(=leftlfloorfrac{n}{2} ight floor)

    (root_1)的度数始终(>leftlfloorfrac{n}{2} ight floor),我们容易证明(root_1)的割度(>leftlfloorfrac{n}{2} ight floor)

    现在判断树上此时是否存在点度数(>leftlfloorfrac{n}{2} ight floor),若不存在则显然合法
    否则,令该点为(root_2),我们可以发现其与(root_1)相邻

    证明:
    假设其与(root_1)不相邻,令(root_1)在原树上的度数为(d)
    (root_2)在原树上度数(le n-d-1),现在的树是在原树基础操作了(d-leftlfloorfrac{n}{2} ight floor)
    现在(root_2)的度数(le n-d-1+d-leftlfloorfrac{n}{2} ight floor=n-leftlfloorfrac{n}{2} ight floor-1le leftlfloorfrac{n}{2} ight floor)
    (root_2)度数(>leftlfloorfrac{n}{2} ight floor)矛盾

    我们以边((root_1,root_2))为根,(root_1)的子树大小为(leftlfloorfrac{n}{2} ight floor-1)(root_2)的子树大小为(n-leftlfloorfrac{n}{2} ight floor-1)
    (其实就是两棵菊花图拼在一起)

    若存在一条边,其两端为(root_2)的子节点,我们可以将其加入树,使得(root_2)度数(-1)
    若存在一条边,其一端为(root_1)的子节点,另一端为(root_2)的子节点,我们可以将其加入,使得(roo_1,roo_2)度数(-1)
    若存在一条边,其一端为(root_1),另一端为(root_2)的子节点,我们可以将其加入,使得(root_2)度数(-1)

    若这三类边均不存在,显然(root_2)的割度(=leftlfloorfrac{n}{2} ight floor+1)

  • 相关阅读:
    Mysql事后触发器练习
    基础算法2.1——枚举法
    JSP第二次作业:使用session记录次数的猜数游戏
    JSP第一次作业:使用Cookie记录用户上次访问时间
    Python数据清洗见闻
    Python作业碎碎念
    数组那些事儿
    %1e9+7问题收录
    DB2数据库关于delete in id和batch delete的性能对比
    关于sql知识全面总结
  • 原文地址:https://www.cnblogs.com/Grice/p/14179268.html
Copyright © 2011-2022 走看看