时间限制: 1 s

空间限制:
128000 KB

题目等级
: 白银 Silver

题解

查看运行结果


题目描述 
Description

学校需要将n台计算机连接起来,不同的2台计算机之间的连接费用可能是不同的。为了节省费用,我们考虑采用间接数据传输结束,就是一台计算机可以间接地通过其他计算机实现和另外一台计算机连接。

为了使得任意两台计算机之间都是连通的(不管是直接还是间接的),需要在若干台计算机之间用网线直接连接,现在想使得总的连接费用最省,让你编程计算这个最小的费用。


输入描述 
Input
Description

输入第一行为两个整数n,m(2<=n<=100000,2<=m<=100000),表示计算机总数,和可以互相建立连接的连接个数。接下来m行,每行三个整数a,b,c
表示在机器a和机器b之间建立连接的话费是c。(题目保证一定存在可行的连通方案,
数据中可能存在权值不一样的重边,但是保证没有自环)


输出描述 
Output
Description

输出只有一行一个整数,表示最省的总连接费用。


样例输入 
Sample
Input

3 3

1 2 1

1 3 2

2 3 1

代码:

#include

using namespace std;

#include

#include

#include

#define maxn 100001

#define INF 0x7fffffff

int n,m,a,b,c;

long long tot=0;//long long
才能存下

int father[maxn]={0};

struct Edge{

int u,v,w,next;

};

Edge edge[maxn];

void input();

void krsual();

int main()

{

input();

krsual();

printf("%lld\n",tot);

return 0;

}

int cmp(const Edge &a,const Edge &b)

{

return a.w

}

void input()

{

scanf("%d%d",&n,&m);

for(int i=1;i<=m;++i)

edge[i].w=INF;

for(int i=1;i<=m;++i)

{

scanf("%d%d%d",&a,&b,&c);

if(edge[i].w>c)

{

edge[i].w=c;

edge[i].u=a;

edge[i].v=b;

//    
edge[i+m].w=c;(处理无向图的边表,都加m就可以了)

//    
edge[i+m].v=a;

//    
edge[i+m].u=b;

}

}

}

int find(int x)

{

if(father[x]!=x) father[x]=find(father[x]);

return father[x];

}

void unionn(int r1,int r2)

{

father[r2]=r1;

}

int k=0;

void krsual()

{

for(int i=1;i<=n;++i)

father[i]=i;

sort(edge+1,edge+m+1,cmp);

for(int
i=1;i<=m;++i)//把所有的边都遍历一遍

{

int r1=find(edge[i].u);

int r2=find(edge[i].v);

if(r1!=r2)//注意并查集合并和查找都是找的集合的代表元素

{

unionn(r1,r2);//不是合并两个点,是合并代表元素

tot+=edge[i].w;

k++;

if(k==n-1) return ;//计数,n-1条边就够了

}

}

}

24.最优布线问题(kruskal算法)的更多相关文章

  1. [图论]最优布线问题:kruskal

    最优布线问题 目录 最优布线问题 Description Input Output Sample Input Sample Output Hint 解析 代码 Description 学校有n台计算机 ...

  2. 【算法设计与分析基础】24、kruskal算法详解

    首先我们获取这个图 根据这个图我们可以得到对应的二维矩阵图数据 根据kruskal算法的思想,首先提取所有的边,然后把所有的边进行排序 思路就是把这些边按照从小到大的顺序组装,至于如何组装 这里用到并 ...

  3. 27.prim算法  最优布线问题(wire.cpp)

    [例4-10].最优布线问题(wire.cpp) [问题描述] 学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来.两台计算机被连接是指它们间有数据线连接.由于计算机所处的位置不同,因此不 ...

  4. 算法笔记_066:Kruskal算法详解(Java)

    目录 1 问题描述 2 解决方案 2.1 构造最小生成树示例 2.2 伪码及时间效率分析 2.3 具体编码(最佳时间效率)   1 问题描述 何为Kruskal算法? 该算法功能:求取加权连通图的最小 ...

  5. 【数据结构】 最小生成树(四)——利用kruskal算法搞定例题×3+变形+一道大水题

    在这一专辑(最小生成树)中的上一期讲到了prim算法,但是prim算法比较难懂,为了避免看不懂,就先用kruskal算法写题吧,下面将会将三道例题,加一道变形,以及一道大水题,水到不用高级数据结构,建 ...

  6. java实现Kruskal算法

    1 问题描述 何为Kruskal算法? 该算法功能:求取加权连通图的最小生成树.假设加权连通图有n个顶点,那么其最小生成树有且仅有n - 1条边. 该算法核心思想:从给定加权连通图中,选择当前未被选择 ...

  7. [图论]最优布线问题:prim

    最优布线问题 目录 最优布线问题 Description Input Output Sample Input Sample Output Hint 解析 代码 Description 学校有n台计算机 ...

  8. 最小生成树---Prim算法和Kruskal算法

    Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...

  9. 转载:最小生成树-Prim算法和Kruskal算法

    本文摘自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html 最小生成树-Prim算法和Kruskal算法 Prim算 ...

随机推荐

  1. nginx 配置代理某个路径

    location /test{ proxy_pass http://localhost:8765/test; proxy_set_header Host $http_host; } 其中红色的那句可以 ...

  2. sniffer简单使用

    跟wireshark类似. 只是说显示的容易忘记所以丢张图记录一下. 该工具还是很坑爹的,不是比赛要用到所以都不是很想弄.一般机器运行不起来.不是蓝屏就是装了运行不了各种闪退,找了学校一台内网服务器才 ...

  3. 搭建linux+nginx+mysql+php环境

    yum install -y gcc gcc-c++  make zlib zlib-devel pcre pcre-devel  libjpeg libjpeg-devel libpng libpn ...

  4. C语言回调函数总结

    /* Main program ---calls--> Library function ---calls--> Callback funtion */ #include <stdi ...

  5. Linux内核线程kernel thread详解--Linux进程的管理与调度(十)【转】

    转自:http://blog.csdn.net/gatieme/article/details/51589205 日期 内核版本 架构 作者 GitHub CSDN 2016-06-02 Linux- ...

  6. 宋牧春: Linux设备树文件结构与解析深度分析(2) 【转】

    转自:https://mp.weixin.qq.com/s/WPZSElF3OQPMGqdoldm07A 作者简介 宋牧春,linux内核爱好者,喜欢阅读各种开源代码(uboot.linux.ucos ...

  7. UVALive 5760 Alice and Bob

    题意是黑板上有n个数\(S_i\).每次操作可以把其中一个数减1或者将两个数合并为一个数.一个数变为0时,则不能再对其操作. 思路是发现最大的可操作次数为\( \sum S_i\)+(n - 1).\ ...

  8. Linux中涉及到环境变量的文件

    1. 系统级 (a) /etc/profile : 在用户登录操作系统时,定制用户环境的第一个文件,应用于登录的每一个用户 ==> 该文件一般调用/etc/bash.bashrc文件 (b)/e ...

  9. Mybatis Common Mapper文件

    表名/条件/字段 都可以传入进去 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mappe ...

  10. 开源介绍:Google Guava、Google Guice、Joda-Time

    一.Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency lib ...