《算法竞赛入门经典》中第11章的题目
题目目前还没看完,先留坑,慢慢填
题目 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
状态 | + | + | +1 | -10 | 0 | 0 | + | +2 | |||
题目 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | |
状态 | + | + | + | + |
一、题目概览
- 很平常的一道Floyd..直接暴力算就好了
- 很平常的一道Dijkstra或SPFA
- 最大流的模板题...但是书上的数据给错了,1到2容量是20...
- 无向图的点连通度,用的是拆点法.这道题比较有意思,后面会有总结。
- 表达式树的大模拟。。
- 又是一个大模拟。。
- Dijkstra,和例题11类似,要考虑当前状态,但并不难写
- 最重要的是星号只能出现一次,只能代替一个字符。因此我们可以把原来的模板拆开,产生至多2000个串,可以用星号代替的串之间连一条边,可以证明我们生成的是二分图(按照奇偶性易于证明没有奇环),然后题目就变成了二分图匹配,跑一个最大流就好了。这是我难得完全自主做出来+对拍的3000+Byte的题。。这道题花了我好长时间调试。。
- 未做
- 未做
- 未做
- 都提示到某个数据结构了,那当然是并查集了!把询问逆序处理,相当于不断向并查集加入元素,模拟记录,逆序输出答案即可
- 未做
- 未做
- 非常清新的构造题,思路类似于贪心,先把所有的边权值和相加,再不断合并。对于每个点,统计出与它相连的边权值总和为sum,最大权值的边权为mx,显然最好的情况就是合并后减少min(sum/2, sum-mx),而可以玄学证明这是可以达到的。(实际要归纳什么的,并不好证)
- 与15题类似,这次是统计对于每个点,包含它的子树的大小。设某个点子树大小为k,则它与父亲相连的边最多被经过次,可以玄学证明这是可以达到的,然后统计答案就可以了。
- 也是一道神构造。设叶子节点数量是m,则至少连(下取整)条边。构造方法是设,然后连接
- 未做
- 未做
- 未做
- 一道很有意思的题,本来看到行列,以及对行列的操作,以为说不定是二分图匹配(受矩阵解压例题影响),结果完全不是!居然是差分约束这个新概念!根据题目列出一系列一次的不等式组,然后建图,用SPFA找最短路/最长路,顺便判断负环,有负环则无解。有空一定要写一写代码。
下面就是对于遇到的新的知识点和方法的总结了
二、点连通度与边连通度
推荐文章点连通度与边连通度的求解。连通度的定义就很容易让人想到最小割,那么怎么把这两者结合呢?总结一下就是下面的方法:
- 边连通度看起来就是裸的最小割模型了,但是源点和汇点是需要注意的,它们是可以任选的。可以暴力枚举源点汇点,但是实际只需固定源点枚举汇点就行了,具体见推荐的文章。
- 点连通度。其实只需要考虑有向图,无向图每条边可以拆成两个。核心的思想是把每个点拆成两个,分别接受从这个点出发的边和到达这个点的边。如下图,带一撇的保存入边,带两撇的保存出边,入边需要和出边连一条边。如果把某个点(如点 )去掉了,我们就把 的边去掉,这样从 到达 的边只能进入 却出不去,从 到 的边变成凭空冒出来的了,因此相当于与 有关的边都没有用了,例如就被隔离了。我们只要统计最少删掉几个这样的 边就行了,但是会不会误删题中给定的边呢?我们只要规定图中给定的边边权无限,而这类的边边权为1就可以完美解决。
但是这样做源点汇点该怎样处理呢?和上面类似,但是一定要注意源点不能选类似的,汇点一定不能选类似的,因为这样做会导致最小割永远是 .
三、差分约束系统
待更新。。推荐文章差分约束系统