zoukankan      html  css  js  c++  java
  • 2019 ICPC 南昌 Regional 部分题解

    B - A Funny Bipartite Graph

    参考题解:https://blog.csdn.net/cat_pikapikapi/article/details/103494593

     

    二分图左部点和右部点个数都<=18

    代价:$sum M_i^{D_i}$ $M_i$是左部点的一个权值 $D_i$是左部点新图中的度数

     法一:

    爆搜+最优化剪枝+合理化剪枝=可过?

    法二:

    易证,新图所有右部点最多连一个边。

    所有右边的点,原图度数总和最多是54

    若爆搜右边点的连边,那么最多的复杂度,就是右边所有点度数都是3(用均值不等式可以证明!)

    这样是$3^n$,加剪枝就可过了。

    法三:(我的)

    暴力枚举左部点选择情况+网络流决定边的选择情况

    Mi=1要特殊处理。

    加上各种剪枝跑得飞快?

    (260行代码,写去吧)

    法四:(看上面博客)

    折半爆搜+子集求前缀和

    (利用左部点只会向编号更大的右部点连边)

    K - Tree

     求树上点对,满足:

     n,k是1e5

    注意:up to是<=k

    做法:

    法一:DSU On Tree

    全局桶---->全局n棵动态开点权值线段树(维护区间和)

    线段树的编号是v[x],内部权值位置是dep[x],

    正常维护即可。

    相当于枚举z(LCA)

    空间:O(nlogn)

    时间:O(nlog^2n)

    法二:线段树启发式合并

    线段树外层是v[x]编号,叶子再挂上为权值dep[x]的线段树

    然后儿子之间启发式合并,查询+统计答案。

    采用节点回收,让空间复杂度可以降下来。

    空间:O(nlogn)

    时间: O(nlog^2n)

    (但是难写很多)

    总结:

    DOT是个好东西。全局数据结构就是好!

    (解决有根树点分治)

  • 相关阅读:
    Bzoj1072--Scoi2007排列perm
    Bzoj1041--Haoi2008圆上的整点
    Bzoj3932--Cqoi2015任务查询系统
    HDU 1024 Max Sum Plus Plus(DP)
    HDU 1029 Ignatius and the Princess IV
    【noip模拟题】数列
    Hello World
    vue-router 进阶
    vue2.0 源码解读(二)
    vue2.0 源码解读(一)
  • 原文地址:https://www.cnblogs.com/Miracevin/p/14305862.html
Copyright © 2011-2022 走看看