2019暑假图论总结

时间:2019-08-20
本文章向大家介绍2019暑假图论总结,主要包括2019暑假图论总结使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

图论学习从入坑就开始了,到现在已经很久了,值得总结一下

梦开始的地方——最短路

最短路题型的特点就是既可以简单又可以复杂

—— 鲁迅

众所周知,最短路常用算法有三种:Floyd,SPFA,dijkstra,每一种在不同情形下都有不同的作用,其中,①Floyd处理多源最短路问题,复杂度为\(O(n^3)\),②SPFA处理(可以)有负权边的单源最短路,\(O(km\)~\(nm)\),且可以判负环,③dijkstra处理无负权边的单源最短路问题,堆优化复杂度为\(O((n+m)logn)\)

话不多说,上题目

1.【模板】单源最短路径(标准版)

题意:RT

做法:卡SPFA的优秀代表,这告诉我们尽量不要用SPFA,用堆优化的dijkstra即可

Q:如果有负权边怎么跑dijkstra?(假设答案不会炸)

A:每条边加上一个权值,然后记录下最短路经过的边数,ans减掉就是最短路。如果边权都很小(比如1e5),可以加上1e10之类的数,然后取模即可

2.单元最长路径(保证一定存在)

题意:RT

做法:每条边取相反数,然后当成单源最短路即可

3.[JLOI2011]飞行路线

题意:给一张无向边带权的图,求从1号点到n号点的最短路,可以使得k条路的边权变为0 \((k\leq 10)\),

做法:最短路的套路之一,分层图。由于k较小,将原图复制k次,分成k+1张图,分别表示当前剩余的免费次数,原图上的一条无向边对应相邻的图与图之间用0边连接,表示使用一次免费次数,每一层的n节点都要连接汇点T,从1号点出发跑最短路,dis[T]即为答案

4.[NOIP2017]逛公园

题意:给一张有向边带权图,求1~n的路径中长度\(\leq\)最短路+k的路径条数\((k\leq50)\),有无数条输出\(-1\)

做法:由于最短路和DP的血缘很近,所以经常会带有DP的思路(或者就是一道DP题)。设\(f[ i ][ j ]\)表示\(dis(1,i)+mindis(i,n)<=mindis(1,n)+j\)的路径条数,如果走了一条边,边权为w,到达v点,则有
\(f[ i ][ j ]->f[ v ][ j+w+mindis(v,n)-mindis(i,n) ]\) ,由于原图有环,所以用上面的方法分层后拓扑排序即可,如果有0环,这个环一定没有入过队列,所以如果有点没有入队,且这个点可以到达(可以到达的意思是,存在一条满足题意的1~n的路径,且这条路径经过这个点),就输出\(-1\)

本题也可以用记忆化搜索完成,原理相同

原文地址:https://www.cnblogs.com/Chtholly/p/11381830.html