zoukankan      html  css  js  c++  java
  • 图论杂题

    矩阵游戏

    https://www.lydsy.com/JudgeOnline/problem.php?id=1059

    刚开始以为只要每行每列都存在一个1,就是可行的解,

    然后发现可以被yxm简单的数据hack掉:

    1 1 1 1

    0 0 0 1

    0 0 0 1

    0 0 0 1

    正解是二分图。

    行和列是互相区分的两组节点,

    如果存在一个1,则可以在它的行列之间连边,

    如果最大匹配数为n,该图就存在可行解。

    容易想到同一行列上的1的数量一定不会变化,

    因为要求在对角线,如果一个1被使用了,它所在的行列就不能再交换到存在1的位置,这些1就废掉了,

    所以使用二分图是可行的。

     

     

    天天爱跑步

    https://loj.ac/problem/2359

    这道题刚开始没有一点思路,只会打45分的暴力。

    虽然知道是树上差分,但是想不到维护什么东西。

    xuefeng提示了我一下,让我想到了维护一个不变的量,通过变量在已有信息中去寻找这个不变量。

    一个点对的路径是$x->lca->y$,设d为深度,len为点对距离,w(a)为a点观察的时间。

    $x->lca$路径段,点a能观察到当且仅当$w(a)=d(x)-d(a) Leftrightarrow w(a)+d(a)=d(x)$

    $lca->y$路径段,点a能观察到当且仅当$w(a)=len-(d(y)-d(a)) Leftrightarrow w(a)-d(a)=d(x)-2*d(lca)$

    分别维护等号右侧的两个不变量即可。

    这个题让我想到了雨天的尾巴,在那道题中要求维护的是区间的最大值,

    使用的维护的方法是合并线段树,但是在这题中复杂度可能会很高。

    这道题让我们维护的是一个单点的值,并且满足这个值的可减性。

    只要维护一个全局数组,在dfs进入时记录下当前的值,递归结束后统计下当前的值,后者减前者就是它的子树对它的贡献。

    Journeys

    bzoj权限题

    关于区间建边:

    $O(n^2m)$的暴力不提,一种$O(nm)$的方法是:

    对于每个区间边,新建一个节点,将区间a每个点与该节点建立权值为0的单向边,将该节点与区间b每个点建立权值为1的单向边,

    就达到了我们的要求。

    更优秀的,一种$O(mlogn^2)$的方法是:

    建立两棵线段树,分别为入边线段树和出边线段树。

    我们把每个节点放到两棵线段树上,让他们作为线段树的叶子节点,

    于是我们可以支持一个区间向另一个区间建边。

    结合两种方法,可以得到$O(mlogn)$的方法。

     

    Tree

    https://www.lydsy.com/JudgeOnline/problem.php?id=2654

    wqs二分

    给每条白边附加一个权值,二分这个权值的大小。

    显然对于附加权值的改变,得到的最小生成树中选择的白边数是单调的。

    当我们恰好得到要求白边数量,我们就得到了一个最有解。

    但对于很多条权值一样的情况,我们不能得到恰好为k的情况。

    分析一下题目中的要求,我们在大于k的时候更新答案即可。

  • 相关阅读:
    Vue CLI Plugin Electron Builder 打包出现空白问题
    git 不小心提交大文件出错问题
    electron-vue创建项目
    electron ico文件问题
    多尺寸ico图标制作工具GIMP
    ps ico图标制作插件
    fluent-ffmpeg
    CopyWebpackPlugin 拷贝某个文件夹的文件到某个文件夹
    electron-vue 目录有中文打包报错问题
    js 给控件新增class
  • 原文地址:https://www.cnblogs.com/skyh/p/11192662.html
Copyright © 2011-2022 走看看