图论 笔记

思维题

洛谷 T200599 旅行家

x x x y y y 的路径上经过的所有强连通分量内的点一定全部被经过。

连通无向图缩点一定是一棵树,没有修改操作,树上差分即可。

最短路

洛谷P1613 跑路

观察 n n n 的范围,容易想到 Floyd 算法。

但是这题一次走的距离不是 1 1 1,而是 2 k 2^k 2k,既所有距离为 2 k 2^k 2k 的点均可在一秒到达,考虑先用 Floyd 计算出各个点可在一秒内到达哪些点。

f i , j , k f_{i,j,k} fi,j,k 表示 i i i j j j 之间是否存在一条长为 2 k 2^k 2k 的路径。
f i , j , k = max ⁡ { f i , l , k − 1 a n d f l , j , k − 1 } f_{i,j,k}=\max \{f_{i,l,k-1} and f_{l,j,k-1}\} fi,j,k=max{fi,l,k1andfl,j,k1} g i , j g_{i,j} gi,j 表示从 i i i j j j 的最短时间, ∀ f i , j , k = 1 , k ∈ Z ∗ \forall f_{i,j,k}=1,k \in Z^* fi,j,k=1,kZ,都有 g i , j = 1 g_{i,j}=1 gi,j=1
g i , j = min ⁡ { g i , l + g l , j } g_{i,j}=\min\{g_{i,l}+g_{l,j}\} gi,j=min{gi,l+gl,j}
最终答案即为 g 1 , n g_{1,n} g1,n

P1491 集合位置

次短路模板。

最短路依次断掉每一条边暴力跑 Dijkstra 即可。

P1462 通往奥格瑞玛的道路

最大值最小化,二分答案。

每次二分一个最大费用,check 函数跑最短路,不经过价格超过最大费用的点,最少消耗的血量(最短路)小于等于当前血量即可行。

生成树

P1550 [USACO08OCT]Watering Hole G

建立超级源点,向点 u u u 边权为 w u w_u wu 的边,跑最小生成树即可。

差分约束

P5960 【模板】差分约束算法

差分约束模板题。

不连通的情况建立超级源点向所有(入度为 0 0 0 的)点连边权为 0 0 0 的边。

拓展情况
d u + x ≥ d v d_u+x\geq d_v du+xdv u u u v v v 连 一条边权为 x x x 的边。
d u + x > d v d_u+x> d_v du+x>dv d u + x − 1 ≥ d v d_u+x-1\geq d_v du+x1dv
d u + x = d v d_u+x=d_v du+x=dv d u + x ≥ d v d_u+x\geq d_v du+xdv d v − x ≥ d u d_v-x\geq d_u dvxdu

拓扑

洛谷P1983 车站分级

求级别(类似于深度),考虑拓扑

考虑到大于等于不好处理,转换为小于处理,将 " 如果这趟车次停靠了火车站 x x x,则始发站与终点站之间所有级别大于等于火车站 x x x 的都必须停靠。" 转化为 未停靠的车站级别小于停靠过车站的级别。

答案即为拓扑的层数。

注:能排除的情况尽早地排除,即 continue,特别是在时间复杂度高的时候。

洛谷P1137 旅行计划

只往东走,道路均为从西往东,考虑拓扑。

d i d_i di 为点 i i i 的深度,对于每一个点 a n s i = d i + 1 ans_i=d_i+1 ansi=di+1

洛谷P1038 神经网络

神经网络中的神经元分为几层,称为输入层、输出层,和若干个中间层,故考虑拓扑,按题意模拟即可。

答案即为出度为零的所有点的权值。

二分图

洛谷P3386 二分图最大匹配

模板题
匈牙利算法:用一边的点集去匹配另一边的点集即可
网络流:待填坑
注:一边点集匹配,一边点集被匹配,加单向边即可
注:左部点编号是与右部点编号可能是重合的,让某边编号偏移即可,然而还要改数组大小
注:每次匹配前记得清空vst数组

洛谷P2756 飞行员配对问题

约等于模板题,答案直接输出匹配数组即可
用湖南飞行员匹配北京飞行员即可,每个湖南飞行员仅可与一个北京飞行员匹配

洛谷P2071 座位安排

用同学匹配座位即可,一个同学仅可匹配一个座位
对于每一排座位,每个同学向每一排每个座位加边即可
注:由于n的定义,数组范围很迷,要注意
注:左部点编号是与右部点编号可能是重合的,让某边编号偏移即可,然而还要改数组大小

洛谷P2055 假期的宿舍

待填坑

洛谷P1129 矩阵游戏

待填坑

技巧类

洛谷P2296 寻找道路

建立反向边,将各点可到达终点转换为终点可到达各点,bfs 遍历即可。

洛谷P1073 最优贸易

题意即求两个点 s , t s,t s,t 使得存在一条路径 1 → s → t → n 1\rightarrow s\rightarrow t\rightarrow n 1stn 满足 w t − w s w_t-w_s wtws 最大。

考虑 tarjan缩点+拓扑+dp

考虑正解, s , t s,t s,t 之间一定有中间点,正向 1 → n 1 \rightarrow n 1n 扫一遍记录 f i f_i fi 表示 1 ∼ i 1\sim i 1i 中的最小值,反向 n → 1 n \rightarrow 1 n1扫一遍记录 g i g_i gi 表示 i ∼ n i\sim n in 中的最大值,枚举中间点,答案即为
a n s = max ⁡ { g i − f i } ans=\max\{g_i-f_i\} ans=max{gifi}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值