最短路
捡石子的小孩
这个作者很懒,什么都没留下…
展开
-
Currency Exchange poj1860
个人认为这是一道比较好的题目,考虑了很多知识点。很显然题目是要求一种兑换方案使最后的钱最多,但如果我们将钱数都取其相反数,那么反过来就是求最小的钱数了(当然此时的钱数是个负数了,不过为了叙述方便,我们就暂且认定钱可以为负吧)。到了这里还存在一个问题,在已知的一种兑换方案中一旦存在负环,那么该方案就不存在最小钱数了,因为它可以无限小,则该方案肯定满足题意。 所以该题在求出最短路径后,应该还要判断是原创 2012-10-14 00:38:50 · 1447 阅读 · 0 评论 -
Wormholes poj3259
这道题只要把题目要求的弄明白了,其实就很简单了。仔细分析题意后可以发现,实质上是要我们判断图中是否存在负环。我的做法是先任取一个点为起点,求一次最短路,然后就可以很容易的判断图中是否存在负环了 //此题实际上就是要求图中是否存在负环,因此可以已某一个点为起点先求一次最短路,再判断是否存在负环 //时间复杂度为O(nm) #include #include using namespace原创 2012-10-14 11:42:38 · 990 阅读 · 0 评论 -
poj 2253 Frogger
这道题是一个Dijkstra的变形,d[i]表示的是从stone #1到stone #i的所有路径中,每条路径距离最远的两块石子的最小值,即最大最小问题。 PS:不知道为什么用g++提交就WA,c++就过了 #include #include #include using namespace std; struct point { double x,y; }p[20原创 2012-10-14 16:11:44 · 997 阅读 · 0 评论 -
poj1125 Stockbroker
这是一个多源最短路径问题,可以先用floyd求出各顶点之间的最短距离,然后再分别以某一点为源点,求出其余各点到该点的最长距离,最后再取最少值。 #include #include using namespace std; const int maxn=105; const int INF=100000000; int d[maxn][maxn]; int n,ans,start;原创 2012-10-14 17:20:12 · 611 阅读 · 0 评论 -
Arbitrage poj2240
本题是一个判断是否存在负环的问题,具体的做法就是先求一次单源最短路径,再判断负环就很容易了。 至于字符串处理的问题,随便用一个hash函数就行了。 #include #include using namespace std; struct { int a,b; double rate; }map[1000]; const int M=101; int hash[M];原创 2012-10-14 19:28:31 · 740 阅读 · 0 评论 -
A Walk Through the Forest hdu1142 最短路+简单动规
这道题用到了最短路和dp的知识,感觉是一道不错的题目 首先根据原题所提供的图,已2为起点求一次单源最短路径,然后再根据题目所说的,当d[i]>d[j]时则可以从i到j,所以可以按照这个要求建另外一个图,这个图就是很典型的一个“数塔”模型了,所以再dp一下,就可以求出路线数。 具体看代码实现。 #include #include #include using namespace st原创 2012-12-03 20:25:11 · 691 阅读 · 0 评论