最小生成树Prim和Kruscal
文章平均质量分 78
Polya_Xue
这个作者很懒,什么都没留下…
展开
-
kruscal最小树
和我一开始想的一样,连了线的点做相同的标记,直到所有的点标记相同#include using namespacestd;#define imax 1005int n,a[28][28];struct list{ int u,v,w;}e[imax];int cmp(list a,list b){转载 2017-01-18 00:04:40 · 276 阅读 · 2 评论 -
hdu2489(prim+dfs)
题意: 给你n个点,和任意两点的距离,让你在这N个点中找到一个有m个点并且ratio最小的树. ratio = sum(edge) / sum(node)虽然用暴力做的,时间限制还蛮大。。把每m个点用dfs列出来(注意这个dfs必须写的足够精简,每种情况只出现一次,不然会超时)然后最小树找最短边之和比较ra原创 2017-08-17 19:06:49 · 260 阅读 · 0 评论 -
hdu3367(并查集+kruscal)
题意可以当做求一个最大生成树,用kruscal做,而这棵树中可以包含一个环(至多一个)(用并查集做),这个时候用点数来判断kruscal是不行的,要用边数,把边排好序过滤一遍就可以了新边只有两种情况可以加入,一个是和已生成的树的pre不同,直接加入树,另一种和树的pre相同,若此时树中无环也可以加入并且把树的cir定为1用并查集来归并生成树的boss,就可以用cir[boss]来记原创 2017-08-17 23:06:48 · 269 阅读 · 1 评论 -
csu1116(排列后prim)
题意:有一幅双向图连接N个城市(标号1~n,1表示首都) 每个城市有一个价值W.地震摧毁了所有道路,现给出可修复的m条道路并给出修复每条道路所需的费用问在总费用不超过k的情况下,使得 与 首都连通的所有城市 的价值和 最大解题思路:点的数量不超过16 ,2^16次方枚举所有城市是否在连通的集合类再通过prim判断这个集原创 2017-08-24 20:15:40 · 208 阅读 · 1 评论 -
次小生成树
次小生成树,由最小生成树替换一条边得到在生成最小生成树的时候,用Max[i][j]来记录从i到j的路中(这条路是唯一的)值最大的那部分,如4>1->2>3,Max[4][3]记录的是4、1和1、3和2、3中值最大的那条,为什么要这样记录呢,因为求次小生成树的时候就是枚举图的任意两个点:ans = min(ans, min_ans + Map[i][j] - Max[i][j]);a原创 2017-08-25 11:00:06 · 218 阅读 · 0 评论 -
prim
prim算法,建立一个数组存放到所有没有放入图中的点的最小值,不停地更新表,找已放入图中的点到没放入图中的点的最小值,比较巧妙的是用一个数组来记录。。。。忘了的话再写吧#include using namespacestd;#define imax 1005int n,a[28][28],lowcost[28],s[28],u;int prim()原创 2017-01-16 21:53:08 · 301 阅读 · 0 评论 -
uva5713(次小生成树)
题意:秦始皇要修建连通所有城市的路,一共有N个点以及各个点的坐标和人口。修建很多条路使N个城市连通,但是可以使其中一条路的修建费用为0。在修建费用最小的前提下,使得A/B最大。A指费用为0的路所连通的两个城市的人口和,B指除修建费用为0的路之外的所以路之和。解题思路:因为要是整体的修建费用最小,必定要求他的最小生成树。但是可以使生成树中的一条边的费用为0,这样就不能简单的光求最原创 2017-08-26 23:18:46 · 242 阅读 · 0 评论