1231 最优布线问题

1231 最优布线问题

时间限制: 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

样例输出 Sample Output

2

数据范围及提示 Data Size & Hint

最终答案需要用long long类型来保存

水题 裸卡路丝卡尔

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int MAXN=300001;
 7 struct node
 8 {
 9     int u;
10     int v;
11     int w;
12 }edge[MAXN];
13 int num=1;
14 int father[MAXN];
15 int comp(const node & a,const node & b)
16 {
17     if(a.w<b.w)return 1;
18     else return 0;
19 }
20 int find(int x)
21 {
22     if(father[x]!=x)
23     father[x]=find(father[x]);
24     return father[x];
25 }
26 void unionn(int x,int y)
27 {
28     int fx=find(x);
29     int fy=find(y);
30     father[fx]=fy;
31 }
32 int main()
33 {
34     int n,m;
35     scanf("%d%d",&n,&m);
36     for(int i=1;i<=n;i++)father[i]=i;
37     for(int i=1;i<=m;i++)
38     {
39         scanf("%d%d%d",&edge[num].u,&edge[num].v,&edge[num].w);
40         num++;
41     }
42     sort(edge+1,edge+num,comp);
43     long long int k=0;
44     long long int tot=0;
45     for(int i=1;i<=num-1;i++)
46     {
47         if(find(edge[i].u)!=find(edge[i].v))
48         {
49             unionn(edge[i].u,edge[i].v);
50             tot=tot+edge[i].w;
51             k++;
52         }
53         if(k==n-1)break;
54     }
55     printf("%lld",tot);
56     return 0;
57 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏栗霖积跬步之旅

一天一个设计模式:策略模式

策略模式属于对象的行为模式,其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响客户端的情...

11220
来自专栏数据结构与算法

数据结构—栈/队列

仔细一想 似乎自己已经有半年已经没有手写栈/队列了 STL里面的栈/队列好用是好用但是速度令人堪忧啊。 于是乎今天自己手写了一份栈&&队列, 以后就用这种格式了...

33050
来自专栏一名叫大蕉的程序员

简约的JAVA版本MapReduce和日常No.25

昨天做了一个小调查,说看看想看些啥。大概的分布是这样的,一个1代表一个投票。看来还是2、3比较多。 11111 希望看到"算法"回复1。 111...

20250
来自专栏追不上乌龟的兔子

使用Python标准库functools中的lru_cache实现缓存

很简单,也很容易理解,但是不难发现这个函数在计算斐波那契数列的时候事实上进行了很多重复计算,例如:

19940
来自专栏小小挖掘机

数据城堡参赛代码实战篇(二)---使用pandas进行数据去重

小编们最近参加了数据城堡举办的“大学生助学金精准资助预测”比赛,分组第19名的成绩进入了复赛,很激动有木有!在上一篇文章中,小编带你使用pandas并结合官方给...

38080
来自专栏小樱的经验随笔

HUST 1585 排队

1585 - 排队 时间限制:1秒 内存限制:128兆 351 次提交 179 次通过 题目描述BG站在一个有n个人的队伍中,但他并不知道他处于队伍中的哪个...

34880
来自专栏用户2442861的专栏

教你如何迅速秒杀掉:99%的海量数据处理面试题

   一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿...

18420
来自专栏数据魔术师

运筹学教学|分支定界法解带时间窗的车辆路径规划问题(附代码及详细注释)

748100
来自专栏申龙斌的程序人生

零基础学编程005:打印一行复利数据

问题 上次文章《集成开发环境IDE》里留了一道练习题: 如何用Python打印这篇枯燥的《复利数据表》: (1+0.01) ^ 1 = 1.01 (1+0.0...

33690
来自专栏IT可乐

深入理解计算机系统(5.1)------优化程序性能

  你能获得的对程序最大的加速比就是当你第一次让它工作起来的时候。   在讲解如何优化程序性能之前,我们首先要明确写程序最主要的目标就是使它在所有可能的情况下都...

248100

扫码关注云+社区

领取腾讯云代金券