博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces Round#332Div2 题解
阅读量:6907 次
发布时间:2019-06-27

本文共 817 字,大约阅读时间需要 2 分钟。

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]\)

转载于:https://www.cnblogs.com/RUSH-D-CAT/p/9736154.html

你可能感兴趣的文章
dojo layout
查看>>
初探 ELK - 每天5分钟玩转 Docker 容器技术(89)
查看>>
c#通过创建Windows服务启动程序
查看>>
系统架构设计指南
查看>>
我的友情链接
查看>>
Jquery Ajax方法传值到action
查看>>
亚马逊图书推荐--我感兴趣的
查看>>
Xmanager连接Centos6.3的远程桌面
查看>>
Office365:客户端升级后无法启动Microsoft Outlook
查看>>
我的友情链接
查看>>
在eclipse中查看Android源代码
查看>>
prometheus+grafana
查看>>
Liferay 启动过程分析3-处理启动事件(第四部分)
查看>>
Rust语言开发基础(七)Rust 特性
查看>>
CountDownLatch示例
查看>>
Windows 8 相关资源 MSDN原版
查看>>
NetScaler VPX 10实施1:NetScaler入门
查看>>
如何优化eclipse
查看>>
互联互通网络质量分析
查看>>
记一次OOM排查解决
查看>>