zoukankan      html  css  js  c++  java
  • 省选模拟24 题解

    A. U.N.OWEN就是她吗?

    字典序最大,只需要贪心。

    考虑用网络流来做这个题。

    每次二分一个答案,然后对当前操作和之前进行的操作与每个元素直接建边,判断是否存在完美匹配。

    因为题中保证了一个特殊性质,考虑通过霍尔定理优化。

    点集 $X,Y$ 存在完美匹配,仅当 $forall Z in X,|match(Z)|>=|Z|$ 。

    于是问题转化为,加入当前这个点,考虑包含当前点的子集是否成立。

    如何利用题中不相交的性质?

    结论是,只需要考虑包含当前点的区间。

    证明其实很简单:

    考虑三个点按左端点排序分别为为 $i,j,k$ ,其中当前加入的点为 $i$ 。

    只需要证明不存在情况,使得 $|match(i) cup match(k)|<|i|+|k|$ ,但 $|match(i) cup match(j) cup match(k)|>=|i|+|j|+|k|$ 

    因为$i,j,k$的左端点是单调的,显然右端点也是单调的。

    那么可以分两种情况考虑,若 $match(i) cap match(j) e varnothing$ ,那么加上 $j$ ,只会使不等关系的右侧变大,所以原式成立。

    若 $match(i) cap match(j) = varnothing$ ,那么可以直接删去$k$,因为 $|match(k)|>=|k|$ 是原来考虑过的内容。

    所以只需要考虑区间的结论是正确的。

    考虑一个暴力做法,分别统计当前节点左侧、右侧的最劣情况,最终合并,这个复杂度是 $O(m^2)$。

    发现可以通过前缀和维护,问题转化为区间最小值最大值,区间修改,线段树可以解决。

    B. 哈德曼的妖怪少女

    鸽了。

    C. 平安时代的外星人

    考虑首先跑出来由 $(0,0)$ 到每个关键点的左上角的点的最短路树。

    路径是不跨过最短路树的。

    因为一次跨过去,对应一次跨回来,这段路程显然是大于最短路径的。

    然后可以发现问题是一个网格图的最小环。

    把每个点拆为四个点,分别表示当前在这个点的左上、右上、右下、左下来尝试套圈。

    对于最短路树上的边,不建立连边关系。

    通过最短路确定最小环即可。

  • 相关阅读:
    eg_5
    浅谈Java中的Hashmap
    java中方法传入参数时:值传递还是址传递?
    重温概率学(一)期望、均值、标准差、方差
    博客搬家
    golang sync/atomic
    单机配置kafka和zookeeper
    异步消息队列组件
    2017总结
    看完轻松年薪30w+
  • 原文地址:https://www.cnblogs.com/skyh/p/12309677.html
Copyright © 2011-2022 走看看