思维题
洛谷 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,k−1andfl,j,k−1}设
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,k∈Z∗,都有
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+x≥dv,
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+x−1≥dv。
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+x≥dv 且
d
v
−
x
≥
d
u
d_v-x\geq d_u
dv−x≥du。
拓扑
洛谷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 1→s→t→n 满足 w t − w s w_t-w_s wt−ws 最大。
考虑 tarjan缩点+拓扑+dp
考虑正解,
s
,
t
s,t
s,t 之间一定有中间点,正向
1
→
n
1 \rightarrow n
1→n 扫一遍记录
f
i
f_i
fi 表示
1
∼
i
1\sim i
1∼i 中的最小值,反向
n
→
1
n \rightarrow 1
n→1扫一遍记录
g
i
g_i
gi 表示
i
∼
n
i\sim n
i∼n 中的最大值,枚举中间点,答案即为
a
n
s
=
max
{
g
i
−
f
i
}
ans=\max\{g_i-f_i\}
ans=max{gi−fi}