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
- Cisco Linksys路由器蠕虫The Moon正在蔓延
- 移动支付安全评测:微信支付篇
- 如何优化 Android Studio 启动、编译和运行速度?
- 微信小程序左右滑动切换图片酷炫效果(附效果)
- Facebook推出用于android数据加密的开源API
- Android 表单验证框架:AValidations
- 推荐系统介绍
- Android WebView 上传文件支持全解析
- 网站管理软件 – AspxSpy2014 Final
- 特性分支与特性开关哪家强?
- Android快速开发框架 roboguice
- 悄悄的干活,打枪的不要!勒索+比特币挖矿木马
- 拥有可移动头像的折叠Android工具栏:CollapsingAvatarToolbar
- Android平台下的第一个Tor木马
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android实现用文字生成图片的示例代码
- Android bindservice失败解决方法
- Android 悬浮窗权限各机型各系统适配大全(总结)
- Android中Fragment相互切换间不被回收的实现方法
- Android手机管理工具类详解
- 通过代码学Sutton强化学习第四章动态规划
- android通过okhttpClient下载网页内容的实例代码
- Android自定义键盘的实现(数字键盘和字母键盘)
- Android iconify 使用详解
- XRecyclerView实现下拉刷新、滚动到底部加载更多等功能
- 浅析Android 快速实现图片压缩与上传功能
- Android处理时间各种方法汇总
- Android TextView Marquee的应用实例详解
- Android毛玻璃背景效果简单实现代码
- ClickHouse和他的朋友们(3)MySQL Protocol和Write调用栈