• AGC018F


    题意

    有两棵节点数均为 n 的有根树,你需要构造一个序列 (X_1,X_2,...,X_n)。使得对于每一棵树的每一个节点, 若令它所有的后代(包括它本身)为 (a_1,a_2,...,a_k),则都有 (abs(X_{a_1} + X_{a_2} +···+ X_{a_k}) = 1)。 判断是否可行,若可行输出一种可行方案。

    做法

    (-1equiv 1(mod~2)),这启示我们将(a_i)赋为({-1,0,1})
    根据儿子的数量可确定一个点的奇偶性

    显然得两树各点的奇偶性均相同才有可能行
    有个更强的结论是:奇偶性相同一定能构造出可行方案

    这样构造:将所有奇点在两棵树上对应位置连边,建立一个虚点连向两棵树根节点,保留原来的边;跑欧拉回路,对于一条路径,我们设立方向(本身一条路径是没有方向的);若存在某奇点第一棵树跑向第二棵树,设为(-1),否则设为(1),所以偶点设为(0)

    定义横叉边为两棵树间的边
    将欧拉回路拆成若干个有向环。
    1类环表示从当前节点向儿子走,然后又从儿子走回当前点
    2类环表示从当前节点向儿子走,从父亲边走回当前点(反向也是一样的)
    3类环表示从当前节点向父亲边或横叉边走,又从这两个中另一个走回来
    4类环表示从当前节点向儿子走,从横叉边走回当前点(反向也是一样的)
    这样拆分的好处是可以发现一个环上各点和为(0),然后分奇偶点简单讨论一下就可以了。这里不详细展开,可以看这里

  • 相关阅读:
    abstract修饰方法总结
    linux tar.gz zip 解压缩 压缩命令
    html5视频播放
    Response.Redirect 打开新窗体的两种方法
    Gmail POP3设置
    加壳学习笔记(二)-汇编基础
    C#-异常处理:tyr,catch,finally ---ShinePans
    cocos2d jsb 打包 Android APK
    编写你自己的单点登录(SSO)服务
    一分钟制作U盘版BT3
  • 原文地址:https://www.cnblogs.com/Grice/p/12374585.html
Copyright © 2020-2023  润新知