A - 跳蚤电话

观察性质,可以发现每次连边的点一定是有祖先关系的,可以直接挂上去一个,也可以是在中间边上插入一个点。

所以我很自然的想到去计算树上的点的加入顺序,因为一但加入顺序确定,每一次的操作也就随之确定。

这东西有点类似于拓扑序计数,只不过是有一些限制。

对于一颗子树来说,我们可以发现如果root排在了第一个位置,那么对于所有儿子对应的子树就可以随便排列,也就是一个可重集排列。

另一种情况如果root不在第一个位置,那么root前面的点一定来自于同一个儿子对应的子树,root后面又是一个可重集排列。

根据以上性质我们可以考虑DP,设 \(dp_{x,i}\)为考虑x子树,x节点第i个加入所对应的方案数,\(sum_x\) 表示当前x子树并上来了多少节点,\(all_x=\sum_{i=1}^{siz_x}dp_{x,i}\)。

\(dp_{x,i}=(dp'_{x,i} \times C_{sum-i+siz_v}^{siz_v}+(i!=1)\times dp'_{x,1}\times C_{sum-i+siz_v}^{siz_v-i+1})\times all_v\)

这样得到一个复杂度上界为 \(O(n^2)\) 的做法。

观察发现,dp的实质就是考虑根的位置还有根前面的点来自于谁,于是直接枚举就行,没有必要dp。一个点会被所有的祖先枚举到,但是上界依然是\(O(n^2)\)。

不过对于大树比较浅的情况就可以通过了,期望得分 71pts。

我们尝试优化,但是上面做法的本质就是在枚举根的位置,这一步我暂时无法省略,所以无法通过本题。

换一个思路,加入行不通,我们考虑删除。

发现计算方案数并不好算,因为每并上一棵子树都需要去乘上组合数。考虑计算概率,这样的好处是对于每一棵子树概率独立,最后乘上总方案数即可。

设 \(f_x\) 为删完x子树,得到的排列是合法排列的概率。

一个朴素的做法是枚举最后一个删除的是谁。

\(f_x=\frac{1}{siz_x}\times (\prod_{v\in son_x}f_v+\sum_{v\in son_x}\frac{siz[v]}{siz[x]}f_v\times \prod_{k\in son_x \ and\ k!=v}f_k)\)

这样计算复杂度为\(O(nlogn)\)。期望得分 100pts。

把式子拆开,可以得到一个 \(O(n)\)的算法,但是拓展意义不大,所以就不多说了。

B - 密码锁

这个我只会暴搜啦。没什么好说的。

首先这个图是个竞赛图,缩点以后是条链,我们需要计算强联通分量的个数,实际上可以转化为计算割集的个数。所谓割集就是对于一个集合S,集合内部和外部的连边都是指向外边的。

暴搜计算可以得到 49pts。

根据期望的线性性,我们可以单独算出每个集合对应的概率,然后加起来就是期望。

看到大部分边权都是0.5,只有小部分是特殊的。于是我们可以分集合大小计算期望,只计算特殊边,剩下的最后乘上去即可。

考虑到特殊边的边数是不一定的,所以我们给每个特殊边的贡献乘上2,最后乘0.5,这样特殊边的边数就没有影响了。

一个朴素的思路是枚举哪些边有贡献,显然这些边的两端不在一个集合,其余没贡献的特殊边的两端在同一个集合。

这样就可以进行黑白染色,然后缩成很多个联通块,最后做一遍背包往集合里面加点就行。

复杂度 \(O(2^m\times n^2)\)。这个复杂度有点高,平颈在于背包。

观察到我们实际上是在把联通块当成物品来做背包,那么可以分开计算每个联通块的贡献。

具体的,枚举每个联通块中在割集中的是那些点,然后加上贡献。

最后对于每一个联通块,分贡献点数的多少往上做背包即可。

因为只有m条边,所以同一个联通块最多有m+1个点。复杂度 \(O(2^{m+1}+n^2)\)。期望得分 100pts。

DP 专练的更多相关文章

  1. 10-19 dp专练

    dp专练,终于克服了一次自己对dp的恐惧,磕出来一道题. 得分情况: T1:0 T2:0 T3:0 emmmm,磕出来的题是T2,但是因为初始化和int long long的原因爆零了 T1:n只狼排 ...

  2. dp专练

    dp练习. codevs 1048 石子归并 区间dp #include<cstdio> #include<algorithm> #include<cstring> ...

  3. 记502 dp专练

    趁着503的清早 我还算清醒把昨天老师讲的内容总结一下,昨天有点迷了 至使我A的几道题都迷迷糊糊的.(可能是我太菜了) 这道题显然是 数字三角形的变形 好没有经过认真思考然后直接暴力了 这是很不应该的 ...

  4. P1251 递推专练3

    递推专练3 描述 Description 圆周上有N个点.连接任意多条(可能是0条)不相交的弦(共用端点也算相交)共有多少种方案? 输入格式 Input Format 读入一个数N.<=N< ...

  5. [大山中学dp常练-4 Rounds]

    Round#1 2016.9.28 这次晚练十分sb 有点浪费时间 全是dp题 先说过程 3分钟草了第一题之后感觉好像有点水 然后翻了翻题目 看了看第一第四题两颗星 其他三颗星 然后一下子第二题题目太 ...

  6. 数位dp小练

    最近刷题的同时还得填填坑,说来你们也不信,我还不会数位dp. 照例推几篇博客: 数位DP讲解 数位dp 的简单入门 这两篇博客讲的都很好,不过代码推荐记搜的形式,不仅易于理解,还短. 数位dp的式子一 ...

  7. 2016.4.9 NOI codevs动态规划专练

    1.NOI 最大子矩阵 1:最大子矩阵 总时间限制:  1000ms 内存限制:  65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 ...

  8. 2016.4.3 动态规划NOI专练 王老师讲课整理

    1.6049:买书 总时间限制:  1000ms 内存限制:  65536kB 描述 小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元. 问小明有多少种买书方案?(每种书可购买 ...

  9. 【树形dp小练】HDU1520 HDU2196 HDU1561 HDU3534

    [树形dp]就是在树上做的一些dp之类的递推,由于一般须要递归处理.因此平庸情况的处理可能须要理清思路.昨晚開始切了4题,作为入门训练.题目都很easy.可是似乎做起来都还口以- hdu1520 An ...

随机推荐

  1. Mybatis源码系列 执行流程(一)

    1.Mybatis的使用 public static void main(String[] args) throws IOException { //1.获取配置文件流 InputStream is ...

  2. RTD2171U替代方案|CS5266Typec转HDMI 4K60HZ转换芯片方案|CS5266芯片

    RTD2171U 是一款USB Type-C到HDMI转换器结合了USB Type-C输入接口和数字高清多媒体接口(HDMI)输出转换芯片.嵌入式微控制器基于工业标准8051内核.接收器端口将信道配置 ...

  3. .NET6: 三分钟搭建WPF三维应用

    要运行本文中的示例,请先安装Vistual Studio 2022,社区版就可以了. 1 创建项目 选择创建WPF应用 给程序起一个酷酷的名字,选一个酷酷的位置: 选一下.NET6 2 配置项目 从n ...

  4. Java Web程序设计笔记 • 【第3章 JSP内置对象】

    全部章节   >>>> 本章目录 3.1 JSP 内置对象简介 3.1.1 JSP 内置对象概述 3.1.2 JSP 表单处理 3.1.2 request对象 3.1.2 开发 ...

  5. Java初学者作业——编写 Java 程序,在控制台中输入日期,计算该日期是对应年份的第几天。

    返回本章节 返回作业目录 需求说明: 编写 Java 程序,在控制台中输入日期,计算该日期是对应年份的第几天. 实现思路: (1)声明变量 year.month和 date,用于存储日期中的年.月.日 ...

  6. JavaScript交互式网页设计笔记 • 【目录】

    章节 内容 实践练习 JavaScript交互式网页设计作业目录(作业笔记) 第1章 JavaScript交互式网页设计笔记 • [第1章 JavaScript基本语法] 第2章 JavaScript ...

  7. Zookeeper基础教程(四):C#连接使用Zookeeper

    Zookeeper作为分布式的服务框架,虽然是java写的,但是强大的C#也可以连接使用. C#要连接使用Zookeeper,需要借助第三方插件,而现在主要有两个插件可供使用,分别是ZooKeeper ...

  8. C# 设置或验证 PDF中的文本域格式

    概述 PDF中的文本域可以通过设置不同格式,用于显示数字.货币.日期.时间.邮政编码.电话号码和社保号等等.Adobe Acrobat提供了许多固定的JavaScripts用来设置和验证文本域的格式, ...

  9. Linux上天之路(一)之Linux前世今生

    0. Linux的前世今生 linux是什么 linux是一个计算机的操作系统,与windows类似,是一款系统软件 操作系统 说到操作系统其实我们首先要思考三个问题: 1)操作系统是什么? 2)操作 ...

  10. SpringCloud的Config应用

    一.简介 ***应用程序先注册到注册中心,在注册中心根据guli-config服务的名字找到配置中心,然后在配置中心根据配置从github加载基本配置. 二.配置中心(服务端,可以部署集群) 1.依赖 ...