题目:

1212 无向图最小生成树

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注

N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树。

Input

第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量。(2 <= N <= 1000, 1 <= M <= 50000)

第2 - M + 1行:每行3个数S E W,分别表示M条边的2个顶点及权值。(1 <= S, E <= N,1 <= W <= 10000)

Output

输出最小生成树的所有边的权值之和。

Input示例

9 14

1 2 4

2 3 8

3 4 7

4 5 9

5 6 10

6 7 2

7 8 1

8 9 7

2 8 11

3 9 2

7 9 6

3 6 4

4 6 14

1 8 8

Output示例

37

分析:

最小生成树 有两种主要算法, Kruskal 和 Prim、

Kruskal 算法

先把所有边按照权值排序, 依次选择, 把边连接的顶点加入集合,并且加上该边的权值。如果顶点已经在集合中, 择不做操作。

在Kruskal算法中, 集合的实现就用 并查集(不相交集 union-find )来实现。

Prim 算法 :

Kruskal算法是按照边来进行的, Prim 就是按照顶点来进行的。

从任意一个点出发, 把点计入树 T 中, 然后不断贪心选取 T 与其他顶点之间权值最小的边。 并加入 T 中, 就可以得到 MST 了;

实现:

Kruskal算法实现的。

#include <bits/stdc++.h>

using namespace std;

const int maxn = 1000 + 13;

struct Edge {
int from, to, dist;
Edge(int _f, int _t, int _d):\
from(_f), to(_t), dist(_d) {} bool operator < (const Edge a) const {
return this->dist < a.dist;
}
}; struct Kruskal {
int Pre[maxn], Rank[maxn];
int n, m;
vector<Edge> edges; void Init() {
for(int i = 0; i <= this->n; ++i) Pre[i] = i, Rank[i] = 0;
edges.clear();
}
/// UF 的实现
int Find(int x) {
if(Pre[x] == x) return x;
else return Pre[x] = Find(Pre[x]);
} bool Union(int x, int y) {
int ax = Find(x), ay = Find(y);
if(ax == ay) return false;
if(Rank[ax] < Rank[ay])
Pre[ax] = ay;
else {
Pre[ay] = ax;
if(Rank[ay] == Rank[ax]) Rank[ax] ++;
}
return true;
}
/// Kruskal实现。
int kruskal() {
int ans = 0;
sort(edges.begin(), edges.end());
for(int i = 0; i < edges.size(); ++i) {
int u = edges[i].from, v = edges[i].to;
if(Union(u, v)) ans += edges[i].dist;
}
return ans;
} void Add_Edges(int u, int v, int c) {
edges.push_back(Edge(u,v,c));
edges.push_back(Edge(v,u,c));
}
}; Kruskal Ks; int main()
{
int u, v, c;
while(cin >> Ks.n >> Ks.m) {
Ks.Init();
for(int i = 0; i < Ks.m; ++i) {
cin >> u >> v >> c;
Ks.Add_Edges(u, v, c);
}
cout << Ks.kruskal() <<endl;
}
}

51nod--1212 最小生成树的更多相关文章

  1. 51Nod 1212 无向图最小生成树 (路径压缩)

    N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树.   Input 第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量.(2 <= N <= 1000, 1 &l ...

  2. 51Nod 1212无向图最小生成树

    prim #include<stdio.h> #include<string.h> #define inf 0x3f3f3f3f ][]; ],lowc[]; ],int n) ...

  3. 51nod 1212 无向图最小生成树(Kruskal模版题)

    N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树.   Input 第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量.(2 <= N <= 1000, 1 &l ...

  4. (图论)51NOD 1212 无向图最小生成树

    N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树. 输入 第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量.(2 <= N <= 1000, 1 <= M ...

  5. 51Nod-1212 无向图最小生成树

    51Nod: 1212 无向图最小生成树. link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1212 1212  ...

  6. 51nod 1640 天气晴朗的魔法 最小生成树

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1640 题解: 先求最小生成树,记录最大边. 然后求最大生成树 ...

  7. 51 nod 1212 无向图最小生成树(Kruckal算法/Prime算法图解)

    1212 无向图最小生成树 N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树. 收起 输入 第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量.(2 <= N < ...

  8. 51nod 天气晴朗的魔法 - (Kruskall最小生成树)

    题目: 基准时间限制:1 秒 空间限制:131072 KB  51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动.   N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的魔力连接 ...

  9. 51 nod 1212 无向图最小生成树

    http://www.51nod.com/Challenge/Problem.html#problemId=1212 代码 #include<bits/stdc++.h> using na ...

  10. 51nod 1213 二维曼哈顿距离最小生成树

    1213 二维曼哈顿距离最小生成树 基准时间限制:4 秒 空间限制:131072 KB 分值: 160 难度:6级算法题  收藏  关注 二维平面上有N个坐标为整数的点,点x1 y1同点x2 y2之间 ...

随机推荐

  1. 【坑】zsh和oh-my-zsh卸载后导致无法登陆

    apt-get remove zsh 然后断开终端,就再也连不上了,崩溃啊! 以下登陆为www用户登陆 各种找,到这里 https://www.cnblogs.com/EasonJim/p/78630 ...

  2. 054、准备 macvlan环境(2019-03-21 周四)

    参考https://www.cnblogs.com/CloudMan6/p/7352620.html   除了overlay,docker还开发了另一个支持跨主机容器网络的 driver :macvl ...

  3. mysql数据库允许远程连接

    1.验证初始是否允许远程连接 由于本次虚拟机IP为192.168.2.120,因此我们执行 mysql -h 192.168.20.120 -P 3306 -u root -proot(备注:-pro ...

  4. seleniums私房菜系列一 ---- selenium简介

    一.Selenium是什么? Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,本系列现在主要包括以下4款: 1.Selenium Core:支持DHTML的测试案 ...

  5. c语言 弹弹球小游戏

    #include <stdio.h>#include <stdlib.h>#include <windows.h>#include <time.h>#i ...

  6. 【提示框】【计时事件】【cookie】

    1.提示框 1)警告框 <script>function disp_alert(){alert("我是警告框!!")}</script> 2)确认框 fun ...

  7. 【onclick事件】【改变 HTML 内容innerHTML】【图片替换】【改变标签的css】【判断输入是否是数字】

    1.onclick事件 <button type="button" onclick="alert('Welcome!')">点击这里</but ...

  8. shiro 和 跨域过滤器冲突

    在web.xml 中 cros要写在shiro 的配置前面,如下,不然会先过shiro 过滤器就产生跨域问题, 参考web.xml 的过滤器加载顺序 <!-- 跨域请求 --> <f ...

  9. python小练习---TCP服务器端

    针对于上一篇分享python小练习---TCP客户端 http://www.cnblogs.com/zhaijiahui/p/6926197.html我继续按书中内容,向下进行这里需要强调一个事py3 ...

  10. wx小程序-列表详细页点击跳转!

    1.因为template 只是单纯的占位符,所以事件要写在外层view上面 2.通过自定义属性来判断 跳转的是那篇文章  自定义属性    (data-自定义名称 ) 3. 执行 onpostTap方 ...