图论-最短路径
文章平均质量分 72
iHge2k
专注数据结构和算法
展开
-
hdu 4784 Dinner Coming Soon(spfa + 优先队列)
Dinner Coming Soon原创 2014-10-05 20:41:35 · 401 阅读 · 0 评论 -
hdu 3832(最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3832思路:三次spfa求出1,2,3到各点的最短距离,然后枚举中间点到这三点的最短距离之和为ans,最后就是n-ans-1了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namesp原创 2014-05-26 17:59:49 · 321 阅读 · 0 评论 -
hdu 3665(最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3665思路:对海相邻的点进行标记即可,然后就是裸的最短路了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define inf 1<<30 8原创 2014-05-26 18:00:44 · 355 阅读 · 0 评论 -
poj 1062(有限制的最短路)
题目链接:http://poj.org/problem?id=1062思路:要求对于最短路上的点,不能出现等级之差大于m,于是我们可以枚举,假设酋长的等级为level,于是这个区间范围[level-m,level],[level-m+i,level+i],......,[level,level+m]都是可行的,对于枚举的每个区间范围,做一次SPFA即可,最终结果取最小值即可。 1原创 2014-05-26 18:02:27 · 326 阅读 · 0 评论 -
poj 2449(A*求第K短路)
题目链接:http://poj.org/problem?id=2449思路:我们可以定义g[x]为源点到当前点的距离,h[x]为当前点到目标节点的最短距离,显然有h[x]http://paste.ubuntu.com/5917765/原创 2014-05-26 18:02:37 · 377 阅读 · 0 评论 -
poj 3328(多起点多终点的最短路)
题目链接:http://poj.org/problem?id=3328思路:这道题花了我将近3个小时,结果发现是方向搞错了,orz,过了样例之后提交wa,然后换成优先队列就过了.其实题目意思很简单,就是说一个人从S点起跳,如果先前是左脚(右脚)着地,那么之后只能往某一个特定的区域跳,而经过仔细观察之后可以发现,这块区域可以统一来表示,这样的话就相当于是一个二维平面上的最短路了,只不过是多源多终原创 2014-05-26 18:02:45 · 1599 阅读 · 0 评论 -
hdu 1839(二分+最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1839思路:先给容量从大到小排序,然后二分,每次都一次spfa一下,判断当前的cost[n]的值。。。View Code 1 #include 2 #include 3 #include 4 typedef long long ll; 5 const int MAXN=原创 2014-05-26 17:56:01 · 432 阅读 · 0 评论 -
hdu 3986(最短路+枚举)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3986思路:先spfa求出最短路,然后枚举删除最短路上的边,每次删除一条边,就求一次最短路,然后去最大的那个就行了。。。可以重边的问题没考虑完善,wa了好多次啊!!!View Code 1 #include 2 #include 3 #include 4 #include原创 2014-05-26 17:56:16 · 387 阅读 · 0 评论 -
hdu 1572(dfs+最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1572思路:dfs暴搜即可。View Code 1 #include 2 #include 3 #include 4 using namespace std; 5 #define MAXN 33 6 #define inf 1<<30 7 int map[MAX原创 2014-05-26 17:57:07 · 430 阅读 · 0 评论 -
zoj 2526(一道很好的最短路应用题)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1538题意:最短路问题,但是要求出最短路的条数,同时要求出所有可能的最短路选择中javabean最多的情况。思路:求到终点的最短路径用Dijkstra,其路径更新条件(如果到某个点有多个路径长度一样的最短路径,则选择豆子总数最多的)就是直接加个else if条件原创 2014-05-26 17:59:00 · 393 阅读 · 0 评论 -
hdu 3416(最短路+最大流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3416思路:就是先求一次最短路,最短路我们可以用spfa求出,然后取出最短路上的边建图,容量为1,最后一次SAP即可求出所有路径条数。View Code 1 #include 2 #include 3 #include 4 #include 5 #includ原创 2014-05-26 17:57:41 · 354 阅读 · 0 评论 -
hdu 3191+hdu 1688(最短路+次短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3191题意:求出次短路的长度和条数View Code 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int MAXN=55原创 2014-05-26 17:56:14 · 1107 阅读 · 0 评论 -
hdu 4568 Hunter(spfa预处理 + 状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4568思路:原创 2014-10-06 12:36:46 · 446 阅读 · 0 评论 -
Codeforces Round #103 (Div. 2) D. Missile Silos(spfa + 枚举边)
题目链接:http://codeforces.com/problemset/problem/144/D思路:sho原创 2014-05-29 22:51:41 · 547 阅读 · 0 评论 -
hdu 4179(有限制的最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4179思路:不知道怎么回事,wa了n多次,然后不知道怎么回事就过了==,还是简单的说一下思路吧:一次以起点为源点跑一遍spfa,然后以终点为起点跑一次spfa,这样我们就可以枚举difficult为maxdist的边了,设该边的端点为x,y,于是有ans=min(ans,dist1[x]+Get_D原创 2014-05-26 18:01:49 · 561 阅读 · 0 评论 -
hdu 1548 最短路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548就是Dijkstra算法的应用。。。。不过被坑了好久,原来电梯的up、down是并列的,初始化的时候出错了。。。。调了好半天。。突然醒悟过来了,,,orzView Code 1 #include 2 #include 3 const int N=220; 4 cons原创 2014-05-26 17:51:09 · 392 阅读 · 0 评论 -
hdu 1198农田灌溉
通过这道题,我只想要说图论的题,建好了图,题就解了一大半了。。。 这道题建好图后,dfs暴搜就行了。。。View Code 1 #include 2 #include 3 const int N=60; 4 using namespace std; 5 6 int n,m; 7 char map[N][N]; 8 int visited[N][N];原创 2014-05-26 17:51:30 · 366 阅读 · 0 评论 -
hdu 1317+hdu 1535(SPFA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1317思路:只要在SPFA中将一个条件,就不会进入负环。那么如果有正环呢,显然退出条件是某个点入队列次数>=n,此时退出时只需判断当前点是否与n存在路径,这步可以用Floyd来实现。。。View Code 1 #include 2 #include 3 const int MA原创 2014-05-26 17:55:59 · 465 阅读 · 0 评论 -
hdu 1224(最长路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1224我感觉就是求最长上升上升序列View Code 1 #include 2 #include 3 using namespace std; 4 const int MAXN=110; 5 int n,m; 6 int dp[MAXN]; 7 int valu原创 2014-05-26 17:55:37 · 465 阅读 · 0 评论 -
hdu 2145(最短路+排序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2145思路:题目很简单。。。关键是思想,如果你建图求的是每个点到终点的最短距离,那就TLE了,但仔细一想,我也可以建反向图啊!!!然后一次Dijkstra或者spfa就可以了。。。最后排序即可。View Code 1 #include 2 #include 3 #inclu原创 2014-05-26 17:56:03 · 335 阅读 · 0 评论 -
hdu 2962(最短路+二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962思路:二分枚举高度,每次都sfpa一下,然后如果dist[e]存在的话,就更新shortpath...View Code 1 #include 2 #include 3 #include 4 #include 5 #include 6 const int MA原创 2014-05-26 17:56:12 · 416 阅读 · 0 评论 -
hdu 3873(有节点保护的最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3873思路:题目意思很简单,就是说如果没有攻占保护x的城市,就不能攻占,我们可以用pro[x]记录保护x的所有城市被攻占的最早时间,那么能到x的最短时间为pro[x]和到达x的最短路中的较大者 .dij入队过程中只把In[x](没有被包含的城市)入队 对于出队的x,它的最短时间已经确定,表示已经被占原创 2014-05-26 17:59:53 · 352 阅读 · 0 评论 -
hdu 4396(spfs/二维最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4396思路:dist[i][j]表示到顶点i走了k条路所花费的最小时间,为了节省内存,当j>=k时,直接令j=k即可,然后就是二维spfa求最短路了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #原创 2014-05-26 18:00:06 · 600 阅读 · 0 评论 -
poj 3662(经典最短路)
题目链接:http://poj.org/problem?id=3662思路:这题较多的有两种做法:方法1:二分枚举最大边长limit,如果图中的边大于limit,则将图中的边当作1,表示免费使用一次,否则就当作0,这样只需判断dist[n]与k的大小,然后继续二分边长就可了。方法2:bfs+优先队列,dp[i][j]表示到顶点i,免费使用了j条边的最小花费,于是对于下一个即将要选择的点原创 2014-05-26 18:02:58 · 424 阅读 · 0 评论 -
hdu 4360(最短路变形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4360思路:首先就是要寻找最短路了,然后就是要着“LOVE”连着最多的最短路了,这里我们可以用一个二维数组来记录“LOVE”最多的最短路,然后每次spfa更新的时候维护一下就可以了(每当以‘E'结尾是就要num[i][j]++),最后的情况就是要考虑一下特判n==1是的情况了。 1 #i原创 2014-05-26 18:00:08 · 477 阅读 · 0 评论 -
poj 3072(最短路)
题目链接:http://poj.org/problem?id=3072一涉及稍微计算几何方面的东西就要做好久,一开始先用SPFA写的,可能是由于松弛次数过多导致精度损失,郁闷了好久,然后改成Dijkstra就没什么问题了。http://paste.ubuntu.com/5920764/原创 2014-05-26 18:02:39 · 397 阅读 · 0 评论 -
loj 1002(spfa变形)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25828题意:求所有点到给定的目标顶点的路径上的权值的最大值的最小值。思路:spfa的应用,更新的时候判断max(dist[u],w(u,v)) 1 #include 2 #include 3 #include 4 #include原创 2014-05-26 18:09:01 · 394 阅读 · 0 评论 -
poj 3114(强连通缩点+SPFA)
题目链接:http://poj.org/problem?id=3114思路:题目要求很简单,就是求两点之间的花费的最短时间,不过有一个要求:如果这两个city属于同一个国家,则花费时间为0。如何判断一个是属于同一个国家呢?就要缩点了,这样属于同一个强连通分量的点就是属于同一个国家了。然后就是SPFA求最短路。 1 #include 2 #include 3 #include原创 2014-05-26 18:02:23 · 425 阅读 · 0 评论 -
poj 3255(次短路)
题目链接:http://poj.org/bbs?problem_id=3255思路:分别以源点1和终点N为源点,两次SPFA求得dist1[i](1到各点的最短距离)以及dist2[i](各点到N的最短距离),然后就是枚举边了,设某一条边的两端为u,v,权值为w,则dist1[u]+w+dist2[v]即为1->N的一条路径,在所有的路径中找出次短的即可。http://paste.ubun原创 2014-05-26 18:02:41 · 344 阅读 · 0 评论 -
poj 3613(经过N条边的最短路)
题目链接:http://poj.org/problem?id=3613思路:我们知道如果矩阵A表示经过1条边的方案数,那么A^N矩阵就代表这经过N条边的方案数,而本题中要求经过N条边的最短距离,于是我们可以把原来矩阵的乘法改成加法,这在08年国家队的一篇论文中有证明:《矩阵乘法在信息学中的应用》。至于怎么求A^N矩阵,二分即可。http://paste.ubuntu.com/5925042/原创 2014-05-26 18:02:48 · 921 阅读 · 0 评论 -
loj 1379(最短路变形)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27087思路:题目的意思是求S->T的所有路径中花费总和小于给定的P值的所经过的路径上的最大权值。我们可以从起点做一次SPFA,然后求出起点到所有点的最短路径,然后以终点为起点,将边反向,求终点到起点的最短路,然后枚举每一条边即可,求最大值。 1 #i原创 2014-05-26 18:09:06 · 425 阅读 · 0 评论 -
Codeforces Beta Round #77 (Div. 1 Only) C. Volleyball (最短路)
题目链接:http://codeforces.com/contest/95/problem/C思路:首先dijkstra原创 2014-06-04 21:07:57 · 464 阅读 · 0 评论 -
Codeforces Alpha Round #20 (Codeforces format) C. Dijkstra?(裸的dijkstra)
题目链接:http://codeforces.com/problemset/problem/20/C思路:需要用yo原创 2014-06-04 16:47:32 · 650 阅读 · 0 评论 -
hdu 2363(最短路+枚举)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2363思路:和之前hdu上做过的一题很像。。。就是先求求出所有的高度差,排序后枚举,每次都一次spfa,求出dist,若dist[n]!=inf,说明是在最小高度差下找到了最短路径,直接break即可。。。另外,发现若不用visited[]标记的话,时间是其两倍。。。orz....以后还是老老实实加原创 2014-05-26 17:56:07 · 413 阅读 · 0 评论 -
hdu 1245(最短路+bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1245思路:建图,0点为湖心,n+1点为湖外,然后bfs就可以了。。。具体见代码。View Code 1 #include 2 #include 3 #include 4 #define p 1e-7 5 const int inf=130; 6 const int原创 2014-05-26 17:55:57 · 317 阅读 · 0 评论 -
spfa求最长路
http://poj.org/problem?id=1932spfa求最长路,判断dist[n] > 0,需要注意的是有正环存在,如果有环存在,那么就要判断这个环上的某一点是否能够到达n点,如果能,就说明可以到达,否则,就说明不能。 1 /************************************************************************原创 2014-05-26 18:09:54 · 1807 阅读 · 0 评论 -
poj 1511(SPFA+邻接表)
题目链接:http://poj.org/problem?id=1511思路:题目意思很简单就是要求源点到各点的最短路之和,然后再求各点到源点的最短路之和,其实就是建两个图就ok了,其中一个建反图。1000000个点和1000000条边,一开始用SPFA+vector怎么都是TLE,然后换成邻接表就过了=.=。 1 #include 2 #include 3 #include原创 2014-05-26 18:02:29 · 384 阅读 · 0 评论 -
poj 1724(有限制的最短路)
题目链接:http://poj.org/problem?id=1724思路:有限制的最短路,或者说是二维状态吧,在求最短路的时候记录一下花费即可。一开始用SPFA写的,900MS险过啊,然后改成Dijkstra+priority_queue,60MS,orz.SPFA: 1 #include 2 #include 3 #include 4 #include原创 2014-05-26 18:02:31 · 674 阅读 · 0 评论 -
poj 1797(最短路变形)
题目链接:http://poj.org/problem?id=1797思路:题目意思很简单,n个顶点,m条路,每条路上都有最大载重限制,问1->n最大载重量。其实就是一最短路的变形,定义weight[i]表示源点到顶点i的最大载重量,初始化为0,之后不断去更新就行了。 1 #include 2 #include 3 #include 4 #include 5 #in原创 2014-05-26 18:02:33 · 429 阅读 · 0 评论 -
poj 3653(最短路)
题目链接:http://poj.org/problem?id=3653思路:题目意思很简单,就是二维平面上的图,要求起点到终点的最短路。建图略坑,需要坐标映射,化二维为一维。然后就是Dijkstra求最短路了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using原创 2014-05-26 18:04:49 · 432 阅读 · 0 评论