• 模拟85 题解


    A. 表达式密码

    观察样例,发现答案就是将减法拆为一个减法和多个加法,于是就完了。

    B. 电压机制

    发现问题是认为一条边相邻的两个点颜色相同并不考虑这条边,问图能否二分图染色。

    暴力做法是$O(nm)$的。

    仔细想想就可以发现:

    对于奇环,不能二分图染色,所以必须选择奇环上的边。

    对于偶环,可以二分图染色,但如果选择了偶环上的边必死。

    所以问题是有多少边被所有奇环包含并不被偶环包含。

    部分分提示可以生成一棵树,并考虑所有的非树边形成的环。

    非树边与树边形成环的贡献是比较好考虑的,树剖/树上差分等一些方法都可以维护。

    然而非树边和非树边也可能形成环。

    所以大力分类讨论,

    1.两个非树边分别与树边形成奇环,那么两个非树边形成偶环。

    因为两个奇环保证了只有重叠部分才有贡献,不考虑这个偶环是正确的。

    2.两个非树边分别与树边形成偶环,那么两个非树边形成偶环。

    两个偶环已经保证了所有树边都死了,不考虑这个偶环是正确的。

    3.两个非树边分别与树边形成奇环和偶环,那么两个非树边形成奇环。

    (1).奇环在上偶环在下,只有形成奇环的非树边可能会活,至于这个贡献留到下面。

    (2).偶环在上奇环在下,偶环必死,原奇环仍然被现在形成的奇环包含。

    可以得出结论是:非树边与非树边形成的环,如果不去考虑,对答案没有影响。

    所以一遍$dfs$,保证每一条非树边都是返祖边,将会非常好做。

    非树边对答案也可能产生贡献,但产生大小为1的贡献仅当非树边只与树边形成一个奇环。

    因为一旦产生两个奇环,每一条非树边都不可能被覆盖两次。

    C. 括号密码

    对于区间不相交的情况:

    当每个括号对整体造成$2$的贡献的时候,这个括号交换是不会亏的。

    对于每一个区间,处理出左侧应该加入的左括号个数,右侧应该加入的右括号个数。

    首先尝试自行交换解决。

    解决不了的部分尽量与其它区间交换解决。这个交换可以用一个变量维护。

    如果区间存在相交但不存在覆盖:

    由一些前缀和关系,中间的交集必是平衡的。所以可以拆分为三个区间。

    如果区间存在覆盖:

    中间的一个区间是平衡的,大区间减去小区间的部分是平衡的。

    总体来说,将每个覆盖区间集合相同的点视作一个序列。分别统计每个序列的答案就可以了。

  • 相关阅读:
    java初学
    数据库命名及设计规范(转)
    转-ASP.NET页面之间传递值
    程序员个人职业规划
    如何学习别人的代码(转)
    可映射的CSV读取引擎
    iTween扩展
    Unity3d中NGUI加强版血条(Healthbar)的制作
    Unity3D中寻路Navmesh的简单介绍
    多人网络(Valve开发文档翻译[起源引擎])(一)
  • 原文地址:https://www.cnblogs.com/skyh/p/11736185.html
Copyright © 2020-2023  润新知