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

来源:互联网 发布:s.click是淘宝网的吗 编辑:程序博客网 时间:2024/06/06 07:11

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

电车

题目传送门
观察发现n十分小,只有100左右,所以很果断,直接floyd
我们记f(i,j)表示ij的最短路,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条边,每一条边都有两个权值aibi。现在要选出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)表示从i2k步能否到达j
然后,所有存在f(i,j,k)=1的点对(i,j)的距离为1
然后直接最短路即可
本题的主要想法就是要巧妙地将路径转化成边来求解
同时,要善于分析和观察题目数据规模