zoukankan      html  css  js  c++  java
  • 「考试」省选76

    T1
    我们可以考虑最小割树的逆过程。
    然后根据最小割情况复原出最小割树。
    每次找到当前集合中最小的割。
    然后用并查集链接割大于最小的割的情况。
    这样就可以做到分割两个集合了。
    递归下去判断是否有解即可。

    T2
    考虑做树形(dp)
    设:
    (f[x][i])(x)的子树中经过了(i)个点直径的一个端点是(x)的最小代价。
    (g[x][i])(x)的子树中经过了(i)个点的最小边权和。
    (h[x][i])(x)的子树中经过了(i)个点直径的任意端点均不是(x)的最小代价。
    这样就是一个(O(n^2))(dp)了。
    六种转移不再赘述。

    T3
    直接(hash)就行了。
    没啥好说的。
    (hash)有一些技巧。
    如果是双向加入的话,从零点开始双向维护,正反两中读法可以直接用(p,p^{-1})做两种情况的进制。
    这样后一种情况只需要乘(p^{len})就可以复原出(hash)值,而维护却可以(O(1))的维护和计算。

  • 相关阅读:
    Lua弱引用table
    Javascript定义类(class)的三种方法
    双检锁技术
    【翻译】ASP.NET缓存管理
    socket python
    mvc项目
    MSBuild
    阅读glibc源码
    MVC3使用Unity实现依赖注入接口与于实现类自动注册
    C# 指针之美
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/12748066.html
Copyright © 2011-2022 走看看