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