zoukankan      html  css  js  c++  java
  • codeforces Round#332Div2 题解

    codeforces Round#332Div2

    AB

    签到题

    比较激动,纷纷WA了一发。

    C

    • 把数组h复制给a,然后对a数组排序。
    • ha数组,求前缀和,有多少个位置满足(sum a[i] = sum h[i]), 就最多能分成多少块。

    D

    • 我们枚举更短的那条边,这样的边不会太多。
    • 然后求,更长的那条边。

    E

    符合xxx限定条件的图的计数问题。数据范围很状压。

    我们用dp[mask][root]表示,集合mask里的点,以root为根,不违背限定条件的方案数。

    接下来考虑dp[mask][root]是怎样转移而来的。

    x为集合mask - {root}中最小的元素。

    枚举包含元素xmask的子集newmask作为root的一棵子树。
    然后我们可以在newmask中选择一个根newroot.

    接下来我们判断,枚举的newmask,newroot是否合法。

    对于一条已知的边。

    • u!=root,v!=root,如果unewmask中,v不在newmask中,则不合法。
    • root相连的,且在newmask中的点,至多只有一个【root最多只能和newmask中的一个点相连】。如果恰有一个,那么这个点就是newroot, 如果没有,那我们就枚举newroot

    对于一组已知的LCAlca(a,b)=c

    • 如果c=root,a,b都在newmask中,不合法。
    • 如果cnewmask中,a,b有一个不在newmask中就GG了。因为这样的话,cnewmask对应的子树里面,a,b至少有一个在newmask子树外面。

    对于合法的newroot,newmask

    (dp[mask][root] = sum dp[newmask][newroot]*dp[mask-newmask][root])

  • 相关阅读:
    卸载linux自带openjdk并安装sun jdk
    配置互信
    【学习笔记】计算理论
    python 矩阵乘法
    一个python二维列表格式化美观输出的题目
    【学习笔记】SICP读书笔记&&UCB CS61A学习笔记(学习中。。。)
    js模块化编程(未完待续)
    js——封装音频播放 暂停
    js——构造函数手撕大转盘
    kubernetes的iptables与ipvs详解
  • 原文地址:https://www.cnblogs.com/RUSH-D-CAT/p/9736154.html
Copyright © 2011-2022 走看看