图论算法做题集锦(持续更新中)

最近开始练习一些图论题
感觉图论题可能最近会考得比较多……
话不多说,直接上题

电车

题目传送门
观察发现 n 十分小,只有 100 左右,所以很果断,直接floyd
我们记 f(i,j) 表示 i j 的最短路, can(i,j) 表示 i 是否能到达 j
那么, f(i,j)=min(f(i,k)+f(k,j)) (can(i,k)=1,can(k,j)=1)
其实dijkstra或者spfa都可

道路

题目传送门
观察到要求最大值最小的问题,果断用二分答案
我们二分最大的费用是多少,那么费用比这个大的就肯定不能到达了
然后spfa即可, dis(i) 表示从1到 i 最少要多少血量

赚钱

题意:
n 个点, m 条边,每一条边都有两个权值 ai bi 。现在要选出 n1 条边,使得 ΣaiΣbi 最大

简单的01分数规划
二分最后的比值,假设当前比值为 mid
将第 i 条边变成 aibi×mid
然后做最大生成树即可

泥泞

题目传送门
和上一题一样,同样是01分数规划
只是这一次检查的方式变成了做最长路
这种题全是简单的套路

昂贵的聘礼

题目传送门
基本就是比较简单的最短路变形了
不妨假设只从等级高的去往等级低的
先枚举初始的等级,然后最短路
比较简单的最短路

躲避大龙

题目传送门
也是一道最短路变形的题目,只是状态的数量增多了而已
我们可以将状态从一维升到二维
f(i,j) 表示从1号点到 i 时刻为 j 是否可能
最短路求解即可
最后只要寻找 f(2,i)=1 时最小的 i 即可

最优贸易

题目传送门
乍一看感觉很难的样子
显然不能边遍历边算,因为你不知道什么时候买什么时候卖
那么,我们引进一个高档的想法,求出从1-n的最小花费,再将边反向,求出n-1的最大收入,两者相减即可
代码就不再写了,比较容易实现

跑路

题目传送门
因为有自环,而且可以一直绕着走,所以比较麻烦
但我们发现,每一次在走 2k 时时间为1,所以我们要尽量这么走
所以,这十分类似于倍增的思想
那么,我们记 f(i,j,k) 表示从 i 2k 步能否到达 j
然后,所有存在 f(i,j,k)=1 的点对 (i,j) 的距离为1
然后直接最短路即可
本题的主要想法就是要巧妙地将路径转化成边来求解
同时,要善于分析和观察题目数据规模

你可能感兴趣的:(图论,最短路,01分数规划,倍增)