文章分类 -  最短路

ECNU1468:Bicriterial routing
摘要:——url:http://acm.cs.ecnu.edu.cn/problem.php?problemid=1468——problem:路径A比路径B时间少"且"费用低才算A比B"好", 所以B最好只是意味着没有别的路径比它好, 而不是B比别的路径都好. 听起来很拗口, 因为本题的目标函数值不具有全序关系, 即存在不可比较的情况. 所以时间4费用5和时间5费用4的两条路径无法比较. 如果没有比它们更好的, 则它们都是最优"双调路径"(bicriterial应该是双重准则的意思). 另外, 如果有两条时间4费用5的最优双调路径, 则在答 阅读全文
posted @ 2011-03-27 18:58 风也轻云也淡 阅读(568) 评论(0) 推荐(0)
SGU145:Strange People
摘要:——problem:起点到终点的严格K短路(每个点在路径中最多出现一次)——solution:二分+dfs+dijkstra优化——url:http://acm.sgu.ru/problem.php?contest=0&problem=145一开始以为A*就可以了。鉴于A*本来也不会,所以就先学了遍A*。写完发现A*求的是非严格最短路。最后是二分答案+dfs+dijkstra优化过的。注意:1、当当前长度搜到的路径数已经大于K的话,就没必要再搜下去了。不过这样做的话,每次都要初始化下VIS数组。2、用dijkstra求出终点到各点的最短路,用来在DFS的时候剪枝。3、注意二分的问题,如 阅读全文
posted @ 2011-03-27 15:29 风也轻云也淡 阅读(325) 评论(0) 推荐(0)
POJ2449:Remmarguts' Date
摘要:——problem:求起点到终点的非严格最短路——solution:dijkstra+A*以下转载自:http://www.cppblog.com/linyangfei/archive/2008/07/26/47662.html【 先说说启发式搜索吧。通常在解决问题的时候,我们需要用到搜索算法,由已知状态推出新的状态,然后检验新的状态是不是就是我们要求的最优解。检验完所有的状态实际上就相当于遍历了一张隐式图。遗憾的是,所有的状态组成的状态空间往往是成指数级别增长的,也就造成了遍历需要用到指数级别的时间,因此,纯粹的暴力搜索,时空效率都比较低。当然,我们在生活中遇到了类似于搜索的问题,我们并不会 阅读全文
posted @ 2011-03-26 21:23 风也轻云也淡 阅读(386) 评论(0) 推荐(0)
ZOJ3223:Journey to the Center of the Earth
摘要:——problem:n个点,边有两种,一种是普通的路,一种是近道,求在规定时间内从起点到终点用的最少的近道数是多少。——solution:二维DIJKSTRA一开始犯傻了,二分用的近道数,看能不能再规定时间内到达……结果超时。其实直接求DIST[I][J]就好了,然后找个J最小的且在规定时间的的J就是答案了。结果还是超时……感觉50*100*100*100应该不会超……看了下题解,有个小优化,Limit初始为近道数。每次到终点时记录下用的近道数,如果比LIMIT小就更新,这样如果当前状态用的近道数比limit还大的话就直接忽略。View Code 1 #include<stdio.h&g 阅读全文
posted @ 2011-03-25 22:06 风也轻云也淡 阅读(194) 评论(0) 推荐(0)
POJ3072:Robot
摘要:——url:——problem:二维平面上有N个点,求从1到N的最短时间,转向需要时间,每度一秒。——solution:二维DIJKSTRA,DIST[I][J]表示起点到I的最短时间,I的前驱为J,用来计算转向时间。注意:1、转向角度<=180度。2、用atan2比atan好,atan2值域范围-pi到pi。3、计算转向角: 例如:由P1经过P2到P3 angle=fabs(atan2(p2.y-p1.y,p2.x-p1.x)【P2-P1向量的方向角】-atan2(p3.y-p2.y,p3.x-p2.x)【P3-P2向量的方向角】)——————————————————————————— 阅读全文
posted @ 2011-03-20 21:52 风也轻云也淡 阅读(278) 评论(0) 推荐(0)
POJ3662:Telephone Lines
摘要:URL:http://poj.org/problem?id=3662——problem:一个无向图有n个点, p条边, 每边有花费, 可以任意指定有k条边免费, 现要求选择若干条边构成顶点1到顶点n的一条路径, 使得路径上边权最大值(不包括免费边)最小.——solution:二分答案,最短路假设A是可行解,即路径上边权最大值为A,则该路径上边权大于A的边一定小于等于K条。若A不是最优解,那么必然B<A,是的路径上边权大于B的边小于等于K。于是我们可以二分答案,得到一个值X,将所有小于等于X的边变为0,大于X的边变为1。做最短路,则1到N的距离就是所用权值大于X边的条数。如果小于等于K,则 阅读全文
posted @ 2011-03-19 21:18 风也轻云也淡 阅读(350) 评论(0) 推荐(0)
HDU2992:Hotel booking
摘要:——url:http://acm.hdu.edu.cn/showproblem.php?pid=2992——problem: 有n(≤10000)个地点, m(≤100000)条无向边, 其中有h个地点建有旅馆, 一个人从1出发去n, 此人每天最多走10小时, 然后就要进旅馆休息, 第二天继续走, 直到到达n, 问最少需要预定多少家旅馆(最少需要多少天)可以到达n, 若不能到达则输出-1.——solution: h次Dijkstra求出旅馆间最短路, 然后重新建图再做一次最短路。把起点和终点也当做旅馆。对每个旅馆做次最短路,如果两个旅馆之间的时间<=600,那么这两个旅馆能隔天到达,重新 阅读全文
posted @ 2011-03-19 19:31 风也轻云也淡 阅读(478) 评论(0) 推荐(0)