最短路

NOI2019 D2T1 弹跳

KD 树

线段树套set -> 线段树套并查集?

POI2014/2015 ???

\(n\) 个点 \(m\) 条边 DAG。求删掉每个点后 \(1\) 到 \(n\) 最短路。

\(n,m\le 3\times 10^5\)。

首先明显要先求 \(f_i\) 表示 \(1\) 到 \(i\) 的最短路,\(g_i\) 表示从 \(i\) 到 \(n\) 的最短路。

先考虑一个一个求解。

发现删掉 \(x\) 后,原来拓扑序小于 \(x\) 的点(称作 \(A\))内部没有任何影响,拓扑序大于 \(x\) 的点(称作 \(B\))内部也没有影响。

那么此时答案就是 \(\min\limits_{u\in A,v\in B,(u,v)\in E}(f_u+g_v+w_{(u,v)})\)。

如何对多个求解呢?发现 \(x\) 加一时,只有两个点有变化,随便动态维护即可。

复杂度是一个 \(\log\)。

Gym 101372 E

\(n\) 点 \(m\) 边有向图,计算每个点传递闭包大小,允许有误差,最多差两倍。

\(n,m\le 2\times 10^5\)。

先缩成一个 DAG,给每个点随机一个权值,然后令 \(f_i\) 表示他能到的所有点的权值最小值。可以反向拓扑求。

然后由于随机 \([1,v]\) 的 \(n\) 个数,最小值的期望是 \(\frac{1+v}{n+1}\),解一解可以知道 \(n\approx \frac{1+v}{f_i}-1\)。

多随机几次取平均即可。

([BJOI2014]想法???)

生成树

SD 省队集训2018 D1T1

\(n\) 个点 \(m\) 条边的无向图,第 \(i\) 条边权值是 \(2^i\),要求经过每条路至少一次,问最小总花费。

\(n,m\le 10^5\)。

首先发现,一条边只会经过 \(1\) 次或 \(2\) 次。(欸?smg?)

先把所有边都跑一遍,变成一条边只会经过 \(0\) 次或 \(1\) 次。同时度数为偶数的点已经不用管了,度数为奇数的点还要多走一次。

把这些奇点拎出来,问题就变成了每条边有权值,选了这条边可以把两个端点异或一,要最小的代价把他们都变成 \(0\)。

由于边权很特殊,让最大的边权最小就好了。

二分最大的边权,判断能不能搞出来。

\(O(m\log m)\)。

经典题

\(n\) 个点 \(m\) 条边的无向图,边是白的或者黑的,问多少棵生成树有恰好 \(k\) 条白边。

把白边看作 \(x\),黑边看作 \(1\),跑一下 Ex-Matrix Tree 即可。

直接算复杂度很高,可以代几个值进去然后拉格朗日插值。

复杂度 \(O(n^4)\)。

Hihocoder Challenge 28

求所有生成树权值和的 \(k\) 次方和

\(n,k\le 50,w\le 10^9\)

把每条边看成多项式 \(\sum\limits_{i=0}^k\frac{w^ix^i}{i!}\)。答案就是行列式乘 \(k!\) 的 \(x^k\) 项系数。

行列式是一个 \(n^2\) 次多项式。(假设 \(n,k\) 同阶)

直接搞是 \(O(n^5)\)。

最小方差生成树

\(n\le 10^5\)

先考虑 \(O(m^3\log m)\) 的做法:

首先若固定一个 \(\overline{w}\),那么把每条边的边权设为 \((w-\overline{w})^2\),求个最小生成树即可。

发现当 \(\overline{w}\) 变大时,最小生成树的形态最多会变 \(m^2\) 次(越过两条边的平均值)。那么枚举这 \(m^2\) 棵树求出其取最小值的 \(\overline{w}\)。

如何优化?

有个结论:一条边在最小生成树出现或者消失一定是在两条边的平均值处,不会在别的地方开始出现或消失。应该很显然。

设第 \(i\) 条边开始出现的 \(\overline{w}\) 为 \(l_i\),开始消失的 \(\overline{w}\) 为 \(r_i\)。那么 \(l_i\) 和 \(r_i\) 一定是某个 \(j\) 的 \(\frac{w_i+w_j}{2}\)。

维护 \(l_i,r_i\) 可以做到 \(O(m\log m)\)。具体的,把所有边按边权排序,从小到大进入 LCT,动态维护最大生成树。每次如果加入之前 \(u_i\) 和 \(v_i\) 不连通,那么 \(l\) 是 \(-\infty\)。否则取出 \(u_i,v_i\) 路径上最小的 \(w_j\),\(l_i\) 和 \(r_j\) 都是 \(\frac{w_i+w_j}{2}\),然后拿 \(i\) 替代 \(j\)。最后还在 LCT 里的边的 \(r\) 都是 \(+\infty\)。

2-SAT

???

\(n\) 点 \(m\) 边无向图,\(k\) 个集合 \(S_1\dots S_k\),满足每个点恰好属于一个集合。

现在要在每个集合中选出恰好一个点,使得每一条边至少一个点被选择。

求方案。

\(n,m,k\le 10^6\)

明显 2-SAT。首先对于每条边,一个点的反点向另一个点的正点连边。

然后对于一个集合恰好选一个点,暴力连边边数就炸了。

稍微优化一下,对于每个集合,\(A_i\) 表示前 \(i\) 个点有没有选出一个,\(B_i\) 表示后 \(n-i+1\) 个点有没有选出一个。

那么集合中第 \(i\) 个点的正点向 \(A_i\) 的正点和 \(B_i\) 的正点连边,\(A_i\) 的反点和 \(B_i\) 的反点向集合中第 \(i\) 个点的反点连边。

\(A_i\) 的正点向 \(A_{i+1}\) 的正点连边,\(A_{i+1}\) 的反点向 \(A_i\) 的反点连边。\(B\) 同理。

\(A_i\) 的正点和 \(B_{i+1}\) 的反点互相连边,\(A_i\) 的反点和 \(B_{i+1}\) 的正点互相连边。

复杂度是线性的。

???

\(n\) 个点 \((x_i,y_i)\),可以在每个点上建建筑,以该点为斜边中心的等腰直角三角形,斜边必须平行于 \(x\) 轴或 \(y\) 轴。可以发现至多能建两个。

所有建筑边长必须一样,问最大边长。

\(n\le 60\)。

首先二分答案。

一个点可能建出的四个建筑,按顺时针编号为 \(1\) 到 \(4\),发现建了 \(1\) 就不可能建 \(2\)(反过来也是),建了 \(3\) 就不可能建 \(4\)(反过来也是)(暂时不用考虑 \(1\) 和 \(4\),\(2\) 和 \(3\),待会会考虑到)

然后大力枚举两栋建筑两边。

跑个 2-SAT 即可。

TCO Hard

\(n\) 个点的树,\(m\) 个物品,你要给每个物品确定一个位置 \(p_i\)。

\(k\) 个限制,形如 \(p_x\) 为根时,\(p_y\) 和 \(p_z\) 的 LCA 是 \(Q\)。

求方案。

\(n,m\le 100,k\le 10^5\)

先随便钦定一个根。

点 \(F_{x,y}\) 表示 \(p[x]\) 是否在以 \(y\) 为根的子树里。

\(F_{x,1}\) 肯定是 \(1\),反点向正点连边。

\(F_{x,p}\) 为 \(1\) 时,\(F_{x,fa[p]}\) 也是 \(1\),连一连。

\(F_{x,son_{u,1}}\) 为 \(1\) 时,\(F_{x,son_{u,i}}(i\ne 1)\) 一定是 \(0\),连一连。

接下来考虑限制。相当于以 \(Q\) 为根时 \(p_x,p_y,p_z\) 在三棵不同子树中。

\(F_{x,Q}\) 为 \(0\) 时,\(F_{y,Q}\) 和 \(F_{z,Q}\) 都是 \(1\),连一连。

\(F_{x,Q}\) 为 \(1\) 时,\(F_{y,Q}\) 和 \(F_{z,Q}\) 都是 \(0\),连一连。

其它同理。

复杂度 \(O(nm+k)\)。

欧拉回路

BEST 定理

昨天说过了,这里不再赘述。

CF547D

\(n\) 个点 \((x_i,y_i)\),对点黑白染色,使得每行每列都满足黑点数和白点数之差不大于 \(1\)。

\(n\le 2\times 10^5\)

对每行和每列都建个图。对每个点,把行和列连起来。这是个二分图。

如果是要求黑点白点数完全相等呢?

实际上就是对每个连通块求个欧拉回路,把从左往右的边看成白的,从右往左的边看成黑的。这就是合法的了。

原题呢?

那么就是度数是偶数的点黑白数要相等(不然至少差 \(2\)),度数是奇数的点黑白差恰好为 \(1\)。

那么左右都建一个虚点,左边的奇点连向右边的虚点,右边的奇点连向左边的虚点,对于每个连通块如果两个虚点都是奇点肯定就不行了,否则求出欧拉回路后把虚边删掉,一定合法。

???

\(n\) 个点 \(m\) 条边无向图,对边集的所有子集(共 \(2^m\) 个),若导出子图的每个连通块内都存在欧拉回路,就把答案加上这个子图的边数的平方。

答案对 \(10^9+7\) 取模。

\(n\le 10^5\)

等价于每个点度数都是偶数。

如果是问方案数怎么算?

首先每个连通块互不干扰。对它求生成树,如果非树边选了,把它连的两个点在树上路径的所有边情况都反转一下,是可以的。方案数就是 \(2^{非树边}=2^{E-V+1}\)。

那如果是 \(E\) 呢?

枚举边,看看有多少个方案包含它。

如果这是个桥边那么如果选了,肯定无法走出欧拉回路。挂了。

否则由于这条边已经被固定选了,删掉这条边后仍然是一个连通块,方案数就是 \(2^{E-V}\)。

如果是 \(E^2\) 呢?

发现就是枚举边对,问多少个方案包含它们。

如果这两条边中有桥,就挂了。

如果它们不在一个连通块,按照一条边的方法分开考虑;

如果它们都是非树边,那么方案数是 \(2^{E-V-1}\)(已经固定了两个);

如果它们其中一个是树边,那么选了之后连通性改变当且仅当非树边包住了树边;

如果它们都是树边,那么选了之后连通性改变当且仅当有至少一条非树边包住了这两条边,而且没有非树边连接这两边中间和这两边外面。

有种神奇的转换方法:

给每条非树边随机权值。然后把每条非树边两点路径上所有树边的权值异或上这条非树边的权值。

那么后面两个就变成了两边权值必须相等。

用个 map 之类的就没了。

时间复杂度 \(O(m\log m)\)。

ZROI 暑期高端峰会 A班 Day3 图论的更多相关文章

  1. ZROI 暑期高端峰会 A班 Day3 字符串

    FBI Warning:本文含有大量人类的本质之一 后缀树 反正后缀树就是反串的后缀自动机的 Parent 树,就不管了. 然而 SAM 也忘了 好的假装自己会吧--dls 后缀自动机 大概记得,不管 ...

  2. ZROI 暑期高端峰会 A班 Day2 线性代数

    高斯消元 很普及组,不讲了 当主元没有逆的时候可以辗转相除. 如果也没有带余数除法--没救了 逆矩阵 我们定义矩阵 \(A\) 的逆矩阵为 \(A^{-1}\),满足 \(AA^{-1}=A^{-1} ...

  3. ZROI 暑期高端峰会 A班 Day4 生成函数

    一般生成函数 很普及组,不讲了 生成函数是一种形式幂级数,也就是我们只关心系数,不关心未知数具体的值. 比如 \(\sum\limits_{i\ge 0}x^i=\frac{1}{1-x}\).虽然只 ...

  4. ZROI 暑期高端峰会 A班 Day4 树上数据结构

    FBI Warning:本文含有大量人类的本质之一. 你经历过绝望吗? [ZJOI2007]捉迷藏 询问树上最远黑点对. 动态边分治可以比点分治少一个 \(\log\). bzoj3730 咕了. [ ...

  5. ZROI 暑期高端峰会 A班 Day1 组合计数

    AGC036F Square Constriants 一定有 \(l_i<p_i\le r_i\). 考虑朴素容斥,枚举每个数是 \(\le l_i\) 还是 \(\le r_i\).对于 \( ...

  6. ZROI 暑期高端峰会 A班 Day1 序列数据结构

    FBI Warning:本文包含大量人类的本质之一 CF643G 维护一个序列,可以区间赋值,求区间中出现超过 \(p\%\) 的数. 允许输出不对的数,允许重复输出,但是所有对的数都一定要输出.而且 ...

  7. ZROI 暑期高端峰会 A班 Day5 杂题选讲

    CF469E \(n\) 个需要表示的数,请使用最少的 \(2^k\) 或 \(-2^k\) 表示出所有需要表示的数.输出方案. \(n\le 10^5,|a_i|\le 10^5\). 首先每个数肯 ...

  8. ZROI 暑期高端峰会 A班 Day5 计算几何

    内积(点积) 很普及组,不讲了. \[(a,b)^2\le(a,a)(b,b)\] 外积(叉积) 也很普及组,不讲了. 旋转 对于矩阵 \(\begin{bmatrix}\cos\theta\\\si ...

  9. ZROI 暑期高端峰会 A班 Day6 离线问题

    FBI Warning:本文含有大量人类本质之一. 动态联通问题 允许离线. 模板,不讲了. 归并排序 %@)(#&%)++%($@)%!#(&%)(&@))) 主定理 U^( ...

随机推荐

  1. 前端图片canvas,file,blob,DataURL等格式转换

    将file转化成base64 方法一:利用URL.createObjectURL() <!DOCTYPE html> <html> <head> <title ...

  2. MySQL使用现状分析与优化

    前言 再紧张的裁员氛围,也不该影响你学习的心态.不要本末倒置,技术永远不会落后,只要你还在学习的道路上,没有后退. 数据库架构 目前生产环境RDS是多区可用架构.数据库实例发生计划内或计划外的中断时, ...

  3. Kafka学习笔记1——Kafka的安装和启动

    一.准备工作 1. 安装JDK 可以用命令 java -version 查看版本

  4. Blend Grid行列拖拽控制宽高

    原文:Blend Grid行列拖拽控制宽高 看效果 <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width=&qu ...

  5. nginx 配置 server

    server{ listen 80; server_name test.eoews.cn; #项目文件的路径 root "D:/developer/study/PHPTutorial/WWW ...

  6. tesseract-ocr 开源引擎使用

    国内资料比较少 一搜一大堆一样的 你抄我我抄你 前面怎么下载 怎么安装 怎么使用命令 怎么配中文字体 . 跳过.随便搜搜一大堆 科普下说下 box编辑工具  无论怎么搜jTessBoxEditor ( ...

  7. 剑指Offer_栈的压入序列是否有对应的弹出序列

    题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序. 如:假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是 ...

  8. 2019 医渡云java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.医渡云等公司offer,岗位是Java后端开发,因为发展原因最终选择去了医渡云,入职一年时间了,也成为了面试官 ...

  9. 8. Android加载流程(打包与启动)

    移动安全的学习离不开对Android加载流程的分析,包括Android虚拟机,Android打包,启动流程等... 这篇文章  就对Android的一些基本加载进行学习. Android虚拟机 And ...

  10. 安恒Red Team 内部红蓝对抗框架

    0x00  准备钓鱼攻击(从公开资源) 1.常见的红队攻击向量和技术   2.常见的蓝队侦查和预防控制 0x02 发送钓鱼邮件(到目标组织员工邮箱地址) 1.常见的红队攻击向量和技术   2.常见的蓝 ...