摘要: Dijkstra算法 朴素的Dijkstra算法和prim算法在代码上惊人的相似。 而Dijkstra算法的思想是:在待扩展边中取出最小边,利用此边进行松弛操作,然后更新待扩展边集。重复以上步骤直到所有结点都已访问过。 Dijkstra算法只对没有负权回路的图有效,当然对带负权边,但没有负权回路的图依然有效。 for (int i=1;i<n;i++){ minn=INF; ... 阅读全文
posted @ 2012-12-10 18:27 ay27 阅读(197) 评论(0) 推荐(0) 编辑
摘要: prim算法 prim算法说白了就是贪心,每一步都是取出待扩展的最小边进行扩展。 每次取出待扩展的最小边进行扩展,然后更新待扩展边集,重复以上操作直到所有点扩展完毕。 for (int i=2;i<=n;i++){ min=MAX; for (int j=1;j<=n;j++) if (f[j] && dist[j]<min) min=d... 阅读全文
posted @ 2012-12-10 09:28 ay27 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 来源:http://www.nocow.cn/index.php/Translate:USACO/rect1 很明显灌水法是行不通的。 什么是灌水法?就是把每一个矩形都标记一遍,最后扫描整个大矩阵,算法的时间复杂度是O(N^2),看数据规模就知道肯定死翘翘了。 这题我选用了漂浮法,也称碰撞法。 漂浮法在nocow上是这样描述的: 漂浮法 以逆序来进行放置,即n to 1。逆序的好处在于... 阅读全文
posted @ 2012-12-08 22:32 ay27 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 来源:http://www.nocow.cn/index.php/Translate:USACO/humble 这题看数据规模,只能用O(NlogN)算法了,而且只能逐个数生成。 如何从已经生成的丑数中生成新的丑数,并且严格按照递增规律生成,这是主要解决的问题。 很明显,把已有的丑数乘上一个质数p就得到了新的丑数,这样一个BFS的算法很容易想到,但是判重和判断是否按照严格递增的顺序生成,这个... 阅读全文
posted @ 2012-12-07 21:34 ay27 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 来源:http://www.nocow.cn/index.php?diff=next&oldid=2732&title=Inflate_translate 这是一题非常标准的完全背包问题,不会的参见DD神牛的背包九讲 /*ID:ay27272PROG:inflateLANG:C++*/#include <cstdio>using namespace std;#define NN 1000... 阅读全文
posted @ 2012-12-05 08:24 ay27 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 来源:http://ace.delos.com/usacoprob2?a=ecro6SKAJN4&S=agrinet 这题明显的最小生成树,说多了都侮辱我的智商了= = /*ID:ay27272PROG:agrinetLANG:C++*/#include <iostream>#include <cstdio>#include <cstring>using namespace std;#d... 阅读全文
posted @ 2012-12-04 09:48 ay27 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 来源:http://ace.delos.com/usacoprob2?a=ecro6SKAJN4&S=fracdec 这题主要是处理循环节的问题。 先考虑竖式除法: 1.设被除数为A,除数为B,试除一次有:B/A=C……D 2.令B不变,被除数变成D*10,再进行试除 3.明显竖式除法是递推定义的,而出现循环节则表示被除数重复出现了,由此算法已经很明显了,不再多说。 唉,明明很简单的东... 阅读全文
posted @ 2012-12-04 09:44 ay27 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 来源:http://ace.delos.com/usacoprob2?a=ecro6SKAJN4&S=cowtour 看到题目的数据范围就知道这题应该用O(n^3)的算法做了,明显图论中Floyd算法就符合要求。 算法: 1.floyd求出任意两点的距离; 2.对于连通块A和连通块B,添加一条边e(u,v),把A和B联通,新的连通块称为C,则: dist[C]=dis... 阅读全文
posted @ 2012-12-04 09:29 ay27 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 来源:http://ace.delos.com/usacoprob2?a=aazEDPQYeki&S=comehome 图论水题 主要注意下题目的条件就行了。 注意a和A可以同时出现,因为边数最大是10000,所以边必有重复给出的。 其他的没什么特别的,dijkstra模板秒杀 /*ID:ay27272PROG:comehomeLANG:C++*/#include <cstring... 阅读全文
posted @ 2012-11-24 10:23 ay27 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 来源:http://ace.delos.com/usacoprob2?a=M7C67j8aT97&S=maze1 这题构图是个麻烦。 声明一点:我的构图法不值得借鉴 我把图中的每个点编号,记录每个点与上下左右的连通性,然后用DFS搜索距离。 效率很低,而且构图时特别烦。 但是好处就是DFS很容易写,而且算法也很简单。 当然这题解法很多,DFS能行的BFS一般没问题,当然Dijkstra... 阅读全文
posted @ 2012-11-21 14:52 ay27 阅读(198) 评论(0) 推荐(0) 编辑