
ACM_最短路
文章平均质量分 80
京城一十三
你在凝视深渊的时候 深渊也在凝视着你
展开
-
POJ3160强连通+spfa最长路(不错)
题意: 给你一个有向图,每个点上有一个权值,可正可负,然后给你一些链接关系,让你找到一个起点,从起点开始走,走过的边可以在走,但是拿过权值的点就不能再拿了,问最多能拿到多少权值?思路: 首先我们考虑一个简单的问题,这个题目的负权值点肯定不拿,对于一个环(应该说是一个强连通分量)来说要拿可以一下全拿走(这个自己黄画画),那么一个环的价值是多少?就是这个强连通分原创 2015-03-16 16:48:37 · 1000 阅读 · 0 评论 -
POJ3114强连通+spfa
题意: 给你n个点,m条有向边,q询问,每次询问给两个数a,b输出a->b的最短路,但是题目有个限制,就是在一个环上的任意两点距离为0.思路: 简单题目,直接强连通压缩点,之后一遍spfa就行了。#include#include#include#include#define N_node 500 + 5#define原创 2015-03-16 16:47:47 · 527 阅读 · 0 评论 -
POJ2391 Floyd+离散化+二分+DINIC
题意: 有n个猪圈,每个猪圈里面都有一定数量的猪(可能大于当前猪圈的数量),每个猪圈都有自己的容量,猪圈与猪圈之间给出了距离,然后突然下雨了,问多久之后所有的猪都能进圈。思路: 先跑一遍Floyd求出任意两点之间的最短距离,对于时间,也就是答案,我们可以二分去找,然后对于每次二分,我们可以用DINIC去判断是否满足要求,建图的时候记得拆点,一开始我感觉不用原创 2015-03-16 16:46:14 · 456 阅读 · 0 评论 -
POJ1722二维spfa+优先队列优化
题意: 给你一个有向图,然后求从起点到终点的最短,但是还有一个限制,就是总花费不能超过k,也就是说每条边上有两个权值,一个是长度,一个是花费,求满足花费的最短长度。思路: 一开始写了一个mark[i][j]第i个点花费j状态的spfa,TLE了,然后又优化了下,就是先反向搜索一遍简单最短路(以花费为权值)然后用这个结果在mark[][]二维的最短路里面剪枝用,原创 2015-02-06 16:44:57 · 1021 阅读 · 0 评论 -
POJ1135比较有意思的对短路(多米骨牌)
题意: 有一个骨牌游戏,就是推到一个后所有的牌都会被退到的那种游戏,起点是1,有两种骨牌,一种是关键牌,另一种是普通牌,普通牌是连接关键牌用的,给你一些边a b c的意思是关键牌a倒之后c时间b会被a的效应影响到,被推倒,然后问题是求出所有牌被都被推倒的时间,还有最后倒的牌处在的位置(两种情况,处在某一个关键牌上,处在某一条关键牌之间)。思路: 可以用spfa原创 2015-02-06 16:36:10 · 777 阅读 · 0 评论 -
poj 2472
题意: 给你一个无向图,然后每条边的权值就是不被抓的概率,有个货要从1逃到n,问你他的最安全概率是多少?思路: 水题,直接跑就行了,一开始自己想多了,还转换了一下log,后来发现转换之后会有正环,有正环求最长路就呵呵了,直接跑就行了,具体看代码,我写的是spfa.原创 2014-10-05 13:12:19 · 657 阅读 · 0 评论 -
POJ 3613 快速幂+Floyd变形(求限制k条路径的最短路)
题意: 给你一个无向图,然后给了一个起点s和终点e,然后问从s到e的最短路是多少,中途有一个限制,那就是必须走k条边,路径可以反复走。思路: 感觉很赞的一个题目,据说证明是什么国家队集训队论文什么的,自己没去看那个论文,就说下我自己的理解吧,对于这个题目,我们首先分析下Floyd,那个算法的过程中是在更新的dis[i][j]上再更新,再更新。。。,是想一下,我们原创 2014-09-28 19:44:14 · 906 阅读 · 0 评论 -
hdu4370 比较抽象的最短路
题意: 给你一个n*n的矩阵,然后让咱们构造另一个n*n的矩阵,构造的矩阵有如下要求,1.X12+X13+...X1n=1.2.X1n+X2n+...Xn-1n=1.3.for each i (1思路: 感觉这个思路很奇葩啊,看了网上好多解释,但是很失望啊,几乎所有人说的都一样啊,一样到几乎不差一个字,我就 呵呵了,说实话这个题目我不原创 2014-09-18 20:10:25 · 1145 阅读 · 2 评论 -
hdu4885 有 限制的最短路
题意: 给你起点终点,和一些加油站,和每次加油后的最大行驶距离,问你从起点到终点最少加油次数,要求两点之间必须走直线,见到加油站必须加油,也就是说如果想从a走到b,那么a,b连线上的加油站必须加油。思路: 关键就是处理a,b,之间的点必须加油这个问题,我们可以排序,x小的或者x相等y小的在前面,然后枚举每条边,对于每个点为起点的边如果当前的斜率出现过,那么我们就原创 2014-07-29 22:29:42 · 444 阅读 · 0 评论 -
hdu4849 最短路
题意: 让你求0到所有点最短路中对m取余最小的那个数。思路: 简单题,直接根据题目给的公式把z求出来,然后建边,然后最短路,然后枚举每一个点对m取余记录最小,然后输出答案,然后ac.原创 2014-07-22 10:54:30 · 464 阅读 · 0 评论 -
hdu2482 字典树+spfa
题意: 给你一个地图,地图上有公交站点和路线,问你从起点到终点至少要换多少次公交路线。思路: 首先上面的题意说的和笼统,没说详细是因为这个题目叙述的很多,描述起来麻烦,下面说思路,做这个题首先我们要把起点和终点的坐标求出来,每次点击地图我都是记录当前现则框的坐上角坐标,最后确定图之后再加上给的x,y转换后的实际位置,这样就的到了精准的位置,然后建图,原创 2014-07-21 10:44:58 · 567 阅读 · 0 评论 -
hdu4179 限制最短路
题意: 这个题目估计读懂题意就ok了,关键是题意蛋疼,像我这样的英语渣渣活着可真难啊,题意大体是这样,给你n个点m条无向边,给你起点和终点,让你求从起点到终点的最短路径,其中有一些限制:(1) 所有的边的d必须小于等于题目给的D(2) 必须至少有一条边的d 等于题目给的 D下面说一下d的求法,对于每条边ab,如果a.z >= b.z也就是下坡,d原创 2014-07-19 15:04:53 · 660 阅读 · 0 评论 -
hdu2722 简单最短路,处理好输入就行
题意: 从左上角走到右下角,有的最短时间,每段路径的长度都是2520,每段上都有自己的限制速度,方向。思路: 直接写就行了,就是个最短路,权值是2520/限制,输入的时候细心点就行了。原创 2014-06-09 22:35:02 · 730 阅读 · 0 评论 -
ZOJ 3781 最短路(想法好题目)
题意: 给你一个n*m的矩阵,上面只有两种字符,X或者O,每次可以同时改变相同颜色的一个连通块,上下左右连通才算连通,用最小的步数把这个图弄成全是X或者全是O,题意要是没看懂看下面的样例。Sample Input22 2OXOX3 3XOXOXOXOXSample Output12HintFo原创 2014-06-05 16:01:30 · 610 阅读 · 0 评论 -
POJ1125 Floyd
题意: 给你n个点,问你在哪里选择开会地点,使得到所有点的最长路径最短.思路: n很小,直接Floyd,然后暴力枚举就行了。原创 2014-05-29 08:59:04 · 617 阅读 · 0 评论 -
POJ2570 二进制,位运算,Floyd
题意: 给你一个有向图,两点之间有多种连接方式,然后每次询问都问你点A,B之间有哪些方式可以到达,每个小字母是一个方式.思路: 很巧妙的位运算和Floyd应用,借助Floyd的更新过程,去更新任意两组边组合起来的长边,如 map[i][j] 是由 map[i][k] 和 map[k]][j]接起来的,更新方式很容易理解,是map[i][j] = map[原创 2014-05-29 08:56:28 · 714 阅读 · 0 评论 -
hdu3313 最大流找关键点,或者最短路找关键点.
题意: 给你一个有向图,然后给你起点和终点,问你从起点到终点有多少个关键点,如果当前的这个点删除了就无法从起点到终点,那么这个点就是一个关键点..思路: 有两种做法,我用的是最大流的,另一种是先跑最短路然后搜索,不会所以不介绍另一种,最大流的很容易理解,首先我们拆点建图,每个点拆成两个点,限流是1,然后起点和终点的限流是2,点于点之间是INF,跑一遍最大流,如果原创 2014-05-05 17:05:51 · 1112 阅读 · 0 评论 -
hdu1245 两个权值的最短路
题意: 求s到t的最短路,如果路径相同求那么要求另一个权值尽可能的小.思路: 水题,就是spfa的比较那个地方多了一个可以更新的机会,当(s_x[xin] > s_x[tou] + E[k].cost || s_x[xin] == s_x[tou] + E[k].cost && s_t[xin] > s_t[tou] + 1) 时更新就行了..原创 2014-04-30 21:03:19 · 997 阅读 · 0 评论 -
hdu3786 找出直系亲属 水题
题意:找出直系亲属Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1189 Accepted Submission(s): 493Problem Description如果A,B是C的父母亲,则A,原创 2014-04-19 00:50:41 · 2027 阅读 · 0 评论 -
hdu3768 spfa+全排列
题意: 给你一个无向图,和一些必须经过的点,问你从起点出发,到达所有必须经过的点再回来的最小总路径.思路: 因为必须经过的点的数量很小,小于等于10,全排列是 10! = 3628800 所以以每个必须经过的点为起点跑最短路,记录数值,然后全排列,枚举经过顺序,取得最小就行了..#include#include#include#in原创 2014-04-16 11:29:30 · 813 阅读 · 0 评论 -
hdu2962 二分 + spfa
题意: 给你一个无向图,每条路径上都有自己的长度和最大承受高度,给你起点终点还有车的最大承装高度,问你高度最大的前提下路径最短是多少,求高度和路径.思路: 这种类型题目太多了,就是给你一些限制,然后让你在这个限制的前提下找到另一个最优,涉及到线性单调的一般都可以直接二分枚举a掉,这个也不例外,二分高度,重新建图,或者在跑最短路的时候限制,都可以,具体看代码就懂原创 2014-04-09 12:42:19 · 629 阅读 · 0 评论 -
hdu2833 Floyd + dp
题意: 给你一个无向图,给你两组起点和终点,问你这两组起点和终点的最短路上最多有多少个交点...思路: 开一个数组dp[i][j]记录最短路上i,j之间的点有多少个,这个数组是根据map[][]数组更新的时候更新的,在floyd里,当map[i][j] > map[i][k] + map[k][j] 时,map[i][j] = map原创 2014-04-07 14:44:22 · 586 阅读 · 0 评论 -
hdu2363 枚举最短路
(1) 二分 把所有的高度都拿过来,组合起来,sort一遍,然后二分,找到能连通的最小的那个,但这里存在一起情况,就是遇到高度差相等的时候会bug....(2) 枚举 连通直接break 把所有的高度都拿过来,组合起来,soet一遍,然后暴力枚举上下限制,能连通直接break;这个显然是错的,直接break的话只能保证高度差最小,不能保证路径最短..(3) 枚举原创 2014-03-31 18:38:49 · 645 阅读 · 0 评论 -
hdu1839 二分最短路
题意: 给你n个城市,m条双向边,每条边有自己的长度和最大运输量,让你找到一条时间小于等于T的运输能力最大的那条路...思路: 刚开始以为是费用流呢,后来发现根本不是,因为根本不是在求最优和最优下的其他最优,其实这个题目可以二分最大运输量,每次都根据二分结果建图,比如对于当前的mid,枚举每一条边,如果当前边的流量大于等于mid那么就把当前边连接到图里,枚举原创 2014-03-30 18:03:50 · 681 阅读 · 0 评论 -
hdu3665 水最短路
题意 : 从起点0开始,到达最近的那个是海边的城镇的距离..思路: 水的最短路,随你怎么写,dij,floyd,spfa..都行,只要你喜欢..我写的spfa好久不写了,复习下.#include#include#define N_node 10 + 5#define N_edge 200 + 10#define inf 1000000原创 2014-03-21 20:35:33 · 885 阅读 · 0 评论 -
hdu1428 spfa+记忆化搜索
hdu1428 spfa+记忆化搜索原创 2014-03-13 21:01:01 · 754 阅读 · 0 评论 -
hdu4396 多状态spfa
题意: 给你一个图,让你送起点走到终点,至少经过k条边,问你最短路径是多少....思路: 把每个点拆成50点,记为dis[i][j] (i 1---50 ,j 1---n);代表走到第j个点做过i条边时的最短距离,因为做多五十条边,如果走的过程中,边数大于50直接等于50,因为大于50的时候就没有必要走"回头路"了...然后跑完spfa后在dis[i][原创 2014-03-12 20:58:27 · 757 阅读 · 0 评论 -
hdu1572 水搜索
题意: 中文的不解释;思路: 其实就是一个水的搜索,直接搜索不会超时,还有别跑最短路了,题目没要求跑最短路,别读错题,刚开始自己嘚嗖的跑了一边最短路 wa了 ,正好最近看了STL的全排列就写下吧,省着忘了,反正没有剪枝的深搜也是全排列的枚举..#include#include#define N 30 + 5#defi原创 2014-02-28 19:37:40 · 694 阅读 · 0 评论 -
hdu2433 spfa+mark[x][u][v]优化
题意: 删除每一条边求最短路的和,每删除一个就输出一个和. 思路: 直接暴力可定TLE了,自己SB的尝试过,就要剪纸,当每次输出一个答案的时候我们没有必要再从新暴力全跑一边最短路,我们可以开一个数组mark[s][u][v]来标记,当s为起点是边u,v是否被用过(其实是可能,记录的时候是更新就假设被用过,但也能达到剪纸的目的),开个sum[i]数组原创 2014-02-28 19:22:22 · 622 阅读 · 0 评论 -
hdu3986 spfa + 枚举最短路上的边
题意: 删除一条边后,求最短路中最长的那个(敌人搞破坏).思路: 如果你是敌人你肯定删除最短路上的边,删除别的边最短路的值是不会变的,所以直接枚举最短路上的边去删除,取得最大的就行了...#include#include#include#define N_node 1005#define N_eage 1100原创 2014-02-28 19:03:57 · 982 阅读 · 0 评论