最小生成树(kruskal和prim算法)
文章平均质量分 76
时光爱客
明天是遥远的,我们只能从当下的努力中嗅出它的味道。
展开
-
zoj 1046(Jungle Roads)Kruskal 并查集实现
关于最小生成树现在我只看了克鲁斯卡尔算法,prim算法还没来得及看,先练练kruskal吧,ta用的都是这两个方法写的,确实比较牛,我也正在努力超越,这道题就是纯粹的最小生成树,白书上说kruskal算法基本上都是和并查集一起用的,这样实现起来更高效,确实不错。 关于刷题,我似乎有点感触了,我觉得不能一味的刷题,用题目的数量来满足自己,其实学习一个知识点,我们要理解为什么要用到它,用它来干什么,原创 2014-12-21 21:57:56 · 603 阅读 · 0 评论 -
hdu 1863 畅通工程 kruskal || prim
简单最小生成树,畅通工程,这三道题目都是练习最小生成树的。 注意一下判断是否有通路时,kruskal可以判断每个点的祖先是否相同,prim可以判断每个点是否都加进集合里面了,也就是说是否都访问过。prim算法要把没有给的边初始化为MAX无穷大。。。 代码:(kruskal) #include #include #include #include #include #include #incl原创 2015-08-21 10:06:55 · 515 阅读 · 0 评论 -
hdu 1875 畅通工程再续(kruskal || prim)
这道题目有点变化,条件是每条路的花费不能超过1000也不能小于10,否则不修该条路,所以呢,用kruskal最好,这种方法是检查每一条边,符合情况就加进去,否则就舍去,这样最后判断一下是不是所有的点都有一个共同的祖先就知道是不是连通图。如果用prim算法的话,它每次选的是最小值,得判断一下,实现起来比较麻烦。 代码:(kruskal) #include #include #include #i原创 2015-08-19 23:09:51 · 554 阅读 · 0 评论 -
hdu 1102 Constructing Roads(kruskal || prim)
求最小生成树,有一点点的变化,就是有的边已经给出来了,所以,最小生成树里面必须有这些边,kruskal和prim算法都可以,prim更简单一些,有一点需要注意,用克鲁斯卡尔算法的时候需要将已经存在的边预处理一下,并查集转化为同一个祖先,记得要找他们的祖先再转化。普里姆算法只需要将那些已经存在的边都初始化为0就可以了。 kruskal: #include #include #include #i原创 2015-08-19 17:06:28 · 630 阅读 · 0 评论 -
hdu 1233 还是畅通工程(prim||kruskal)
这个完完全全就是模板题目,没有一点变化,就是单纯的让求最小生成树 代码:(prim) #include #include #include #include #include #include #include #include #include #include #include #include #define MAX 0x7fffffff using namespace std; in原创 2015-08-19 22:19:38 · 585 阅读 · 0 评论 -
uva 10034 Freckles (kruskal||prim)
题目上只给的坐标,没有给出来边的长度,无论是prim算法还是kruskal算法我们都需要知道边的长度来操作。 这道题是浮点数,也没啥大的区别,处理一下就可以了。有关这两个算法的介绍前面我已经写过了,就不在多写了 prim算法: #include #include #include #include #include #include #include #include #include #i原创 2015-08-14 10:05:07 · 663 阅读 · 0 评论 -
zoj 1203 Swordfish Prim算法
这道题稍微有些变化,距离变成了小数,但是PE了好多次,实在不理解为什么要在那个地方换行,题上说的是在两个输出之间有一个空行,难道意思就是除了第一个结果外对于每次输出结果前面都要有一个空行,这样就叫做输出结果之间有一个空行???不用管输入。。。好吧,以后就记着了。 Prim: #include #include #include #include #include typedef struct原创 2014-12-26 15:53:24 · 935 阅读 · 0 评论 -
zoj 2296(Build The Electric System)Kruskal || Prim
今天又听了一次图书馆闭馆音乐,随着人群感觉出来很充实,他们应该都是有目标,有追求的吧,虽然面孔陌生,但是我却觉得他们是那么值得尊敬,值得崇拜,也许是自己也想成为那一类人吧,回来过后,还是忍不住想练一下最短路径,看看自己忘了没有,哈哈,果然还是很熟练,都是用一遍过诶,感觉压根就是标准的模板,只要是最短路径的题目,就写上就行,只是碰到具体要求的时候稍微变形一下就可以了还是两种方法: Kruskal算原创 2014-12-26 00:43:48 · 739 阅读 · 0 评论 -
poj 2485 Highway(Kruskal)
稍微变形了一下,这次是让求最小生成树中最长的那一条的长度,克鲁斯卡尔很方便的,克鲁斯卡尔就是对边进行操作 的,对边进行排序,普里姆算法是对点进行操作的,求出了每个点到其他点的距离,这道题中There is an empty line after each test case这句话我怎么觉得它是打出一个空行呢,就是每两个例子之间用空行分开,但是加了后会PE,好 吧,可能是我理解错了吧,直接复原创 2014-12-23 20:49:29 · 619 阅读 · 0 评论 -
poj 1287 Networking(kruskal || prim)
这道题虽然一条 边有很多不同的长度,但对于kruskal算法来说,根本没有影响,因为他们都在一个并查集里面,对于prim算法来说,只需加一个判断就可以了,wa了好多次,就是因为那个qsort函数把第一个元素都给排进去了,所以一遍ac记录到此为止了,应该差不多有七八次,最近好像有点不舒服,要感冒了,没事,我会继续学习知识点的 kruskal算法: #include #include #inclu原创 2014-12-23 09:19:52 · 731 阅读 · 0 评论 -
poj 1285 Agri-Net(prim || kruskal)
基本上已经不用看前面写过的算法了,这两个算法已经基本上熟练了,这次还使用的两种方法做的, kruskal算法: #include #include #include typedef struct { int i,j; int len; }node; int ans; node map[10005]; int p[105]; int cmp(const void *a,const void原创 2014-12-23 20:19:53 · 586 阅读 · 0 评论 -
uva 10397 Connect the Campus kruskal || prim
uva上的题目总是要难一些的。。。总是会拐弯抹角,这道题目给出有的建筑之间已经建好了光缆,让求最小生成树,我还是比较喜欢用kruskal算法,但是这道题目肯定用prim比较快,prim复杂度是n^2,kruskal复杂度eloge。 用kruskal时需要预先用并查集处理一下已经建好的光缆,让他们属于同一个祖先; 用prim算法的时候需要把他们的边置为0,这样算sum的时候就不会加上了。 代原创 2015-08-21 21:42:29 · 632 阅读 · 0 评论