07 2011 档案
POJ 2227 The Wedding Juicer (dfs+优先队列,传说中的floodfill)
摘要:搜索floodfill相关题目时找到的这题,题目可抽象为:一个WxH大小的方块,每个单元为一块,每个单元有一个高度,从正上方向下注水,问最多能装住多少水。解题思路为,首先最外一圈能装的水量都是0,找出其中最低的,那么与之相邻的(最多四个)方块中,如果比他低,那必可装水至这个块的高度,同时这个装水块的高度上升为那个块的高度。如果比他高或相等,则这块不可装水。然后再找次小的,依次进行,可用优先队列priority_queue来实现,也可以手写堆。//6935#9044110 helloworld 2227 Accepted 1640K 266MS G++ 2107B 2011-07-31 14:5 阅读全文
posted @ 2011-07-31 15:06 NKHe!!oWor!d 阅读(351) 评论(0) 推荐(0)
POJ 3259 Wormholes (Bellman-Ford 求负环)
摘要:本题可抽象为:给出一些点和边,边分为两种,一种为双向边,权值为正,一种为单向边,权值为负。要求给定一个图,判断图中是否有负环。很显然,需要Bellman-Ford算法。因为本题只需判断是否有负环的存在,而不需求最短路,所以可令初始dis均为0,如果第n次松弛成功,则有负环;否则没有。//9043487 NKHelloWorld 3259 Accepted 452K 79MS G++ 1459B 2011-07-31 13:15:57//1A#include <cstdio>#include <cstring>struct date{ int st,ed,d;}edge[ 阅读全文
posted @ 2011-07-31 14:07 NKHe!!oWor!d 阅读(266) 评论(0) 推荐(0)
POJ 1932 XYZZY floyed+Bellman-Ford解法
摘要:本题题目名字跟题目关系貌似不大,或者是因为我没看懂第一段。本题是说有最多100个room,每个room有一个值,从1号room、100体力值开始,通过某种路径走到n号room,每到一个房间就加上或减去相应的体力值。要求过程中体力值不能小于0 。等于0的临界情况是否算die不清楚。。。两种理解都可以过。因为存在可以通过转圈来积攒体力,即存在环,所以单独的floyed和迪杰斯特拉无法求解,需用Bellman-Ford来对付,但是在松弛过程中又需要保证松弛的点最终是可以到达终点的,即“如果存在环,那么终点应该在环中”。所以先用floyed来判断各个点是否能通向终点,松弛过程中只对能到达终点的点进行松 阅读全文
posted @ 2011-07-30 21:56 NKHe!!oWor!d 阅读(328) 评论(0) 推荐(0)
POJ 2240 Arbitrage (floyed) .cpp
摘要:#include <cstdio>#include <cstring>int n,m;double dis[31][31],rate;char name[31][30],name1[30],name2[30];int getpos(char *s){ int i; for(i=1;i<=n;i++) { if(strcmp(s,name[i])==0) { return i; } } return 0;}int main(){ int i,j,k,casenum = 0; while(scanf("%d",&n),n!=0) { cas 阅读全文
posted @ 2011-07-29 13:53 NKHe!!oWor!d 阅读(128) 评论(0) 推荐(0)
POJ 1860 Currency Exchange (Bellman-Ford)
摘要:最短路径学了几种算法,但是一直没有学这个Bellman-Ford算法,因为在求最短路径的时候复杂度较高,不如某D氏算法。但是在求解一些特定问题的时候,他能判断是否存在回路这一特性能发挥很好的最用。例如对于POJ1860,这题英文描述比较NC,看了discuss之后才敢确定自己理解的是正确的。这题是可以多次经过同一种货币的。因此,当求出最长路后,除了是s点的dis大于v的情况是YES外,如果有正回路存在,也是可以达到目的的。这其中由一个玄机是虽然图是单向图,但是题目保证A->B可行时B->A也一定存在。这就是只要存在正回路就能达到目的的原因。//9042312 NKHelloWorl 阅读全文
posted @ 2011-07-28 21:39 NKHe!!oWor!d 阅读(195) 评论(0) 推荐(0)