最小生成树二·Kruscal算法

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

随着小Hi拥有城市数目的增加,在之间所使用的Prim算法已经无法继续使用了——但是幸运的是,经过计算机的分析,小Hi已经筛选出了一些比较适合建造道路的路线,这个数量并没有特别的大。

所以问题变成了——小Hi现在手上拥有N座城市,且已知其中一些城市间建造道路的费用,小Hi希望知道,最少花费多少就可以使得任意两座城市都可以通过所建造的道路互相到达(假设有A、B、C三座城市,只需要在AB之间和BC之间建造道路,那么AC之间也是可以通过这两条道路连通的)。

提示:积累的好处在于可以可以随时从自己的知识库中提取想要的!

输入

每个测试点(输入文件)有且仅有一组测试数据。

在一组测试数据中:

第1行为2个整数N、M,表示小Hi拥有的城市数量和小Hi筛选出路线的条数。

接下来的M行,每行描述一条路线,其中第i行为3个整数N1_i, N2_i, V_i,分别表示这条路线的两个端点和在这条路线上建造道路的费用。

对于100%的数据,满足N<=10^5, M<=10^6,于任意i满足1<=N1_i, N2_i<=N, N1_i≠N2_i, 1<=V_i<=10^3.

对于100%的数据,满足一定存在一种方案,使得任意两座城市都可以互相到达。

输出

对于每组测试数据,输出1个整数Ans,表示为了使任意两座城市都可以通过所建造的道路互相到达至少需要的建造费用。

样例输入
  1. 5 29
  2. 1 2 674
  3. 2 3 249
  4. 3 4 672
  5. 4 5 933
  6. 1 2 788
  7. 3 4 147
  8. 2 4 504
  9. 3 4 38
  10. 1 3 65
  11. 3 5 6
  12. 1 5 865
  13. 1 3 590
  14. 1 4 682
  15. 2 4 227
  16. 2 4 636
  17. 1 4 312
  18. 1 3 143
  19. 2 5 158
  20. 2 3 516
  21. 3 5 102
  22. 1 5 605
  23. 1 4 99
  24. 4 5 224
  25. 2 4 198
  26. 3 5 894
  27. 1 5 845
  28. 3 4 7
  29. 2 4 14
  30. 1 4 185
样例输出
  1. 92
    此算法几个可以优化的地方:
    一是find_fa的时候可以非递归。
    二是merge的时候可以重量or高度优化。
  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<memory>
  6. using namespace std;
  7. const int maxn=1;
  8. int ans,cnt,fa[maxn],n,m;struct in
  9. {
  10. int x;int y;int L;
  11. }s[maxn];
  12.  
  13. bool cmp(in a,in b){
  14. return a.L<b.L;
  15. }
  16.  
  17. int read()
  18. {
  19. char c=getchar();int s=;
  20. while(c>''||c<'') c=getchar();
  21. while(c>=''&&c<=''){s=s*+c-'';c=getchar();}
  22. return s;
  23. }
  24.  
  25. void add(int u,int v,int d)
  26. {
  27. Next[++cnt]=Laxt[u];
  28. Laxt[u]=cnt;
  29. To[cnt]=v;
  30. V[cnt]=d;
  31. }
  32.  
  33. void merge(int u,int v)
  34. {
  35. fa[u]=v;
  36. }
  37.  
  38. int find(int v)
  39. {
  40. if(v!=fa[v]) fa[v]=find(fa[v]);
  41. return fa[v];
  42. }
  43.  
  44. void kruscal()
  45. {
  46. int num=,i,faa,fab;
  47. for(i=;i<=n;i++) fa[i]=i;
  48. for(i=;i<=m;i++){
  49. faa=find(s[i].x);
  50. fab=find(s[i].y);
  51. if(faa==fab) continue;
  52. merge(faa,fab);
  53. ans+=s[i].L;
  54. num++;
  55. if(num==n-) return ;
  56. }
  57. }
  58.  
  59. int main()
  60. {
  61. int i,j;
  62. scanf("%d%d",&n,&m);
  63. for(i=;i<=m;i++){
  64. s[i].x=read();s[i].y=read();s[i].L=read();
  65. }
  66. sort(s+,s+m+,cmp);
  67. kruscal();
  68. printf("%d\n",ans);
  69. return ;
  70. }

HihoCoder 1097 kruscal的更多相关文章

  1. HihoCoder 1097 Prim算法

    1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以 ...

  2. hihocoder 1097 最小生成树一·Prim算法

    #1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...

  3. hihocoder#1098 : 最小生成树二·Kruscal算法

    #1098 : 最小生成树二·Kruscal算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 随着小Hi拥有城市数目的增加,在之间所使用的Prim算法已经无法继续使用 ...

  4. Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)

    #1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可 ...

  5. hihocoder -1121-二分图的判定

    hihocoder -1121-二分图的判定 1121 : 二分图一•二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Net ...

  6. Hihocoder 太阁最新面经算法竞赛18

    Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...

  7. hihoCoder太阁最新面经算法竞赛15

    hihoCoder太阁最新面经算法竞赛15 Link: http://hihocoder.com/contest/hihointerview24 题目1 : Boarding Passes 时间限制: ...

  8. 【hihoCoder 1454】【hiho挑战赛25】【坑】Rikka with Tree II

    http://hihocoder.com/problemset/problem/1454 调了好长时间,谜之WA... 等我以后学好dp再来看为什么吧,先弃坑(╯‵□′)╯︵┻━┻ #include& ...

  9. 【hihocoder#1413】Rikka with String 后缀自动机 + 差分

    搞了一上午+接近一下午这个题,然后被屠了个稀烂,默默仰慕一晚上学会SAM的以及半天4道SAM的hxy大爷. 题目链接:http://hihocoder.com/problemset/problem/1 ...

随机推荐

  1. Java并发之CyclicBarria的使用(二)

    Java并发之CyclicBarria的使用(二) 一.简介 之前借助于其他大神写过一篇关于CyclicBarria用法的博文,但是内心总是感觉丝丝的愧疚,因为笔者喜欢原创,而不喜欢去转载一些其他的文 ...

  2. 使用Python实现基于图像识别的iOS自动化测试

    相对于Android来说,iOS比较封闭.这一点,在设计和评估自动化测试方案的时候感觉尤其强烈.iOS平台上没有特别好用的自动化测试工具.苹果针对iOS提供了UI Automation的Instrum ...

  3. 【WIN7】windows\system32 下的几乎所有文件的简单说明【2】

    1: System32的详解 C:\WINDOWS\system32... 2:   3: 这个 system32 文件夹中包含了大量的用于 Windows 的文件. 这里主要用于存储 DLL 文件, ...

  4. 防止CSRF的攻击—Origin和Referer

    防止CSRF的攻击—Origin和Referer 为了防止CSRF的攻击,我们建议修改浏览器在发送POST请求的时候加上一个Origin字段,这个Origin字段主要是用来标识出最初请求是从哪里发起的 ...

  5. [BZOJ2017][Usaco2009 Nov]硬币游戏

    Description 农夫约翰的奶牛喜欢玩硬币游戏,因此他发明了一种称为“Xoinc”的两人硬币游戏. 初始时,一个有N(5 <= N <= 2,000)枚硬币的堆栈放在地上,从堆顶数起 ...

  6. 并发-ThreadLocal源码分析

    ThreadLocal源码分析 参考: http://www.cnblogs.com/dolphin0520/p/3920407.html https://www.cnblogs.com/coshah ...

  7. THINKPHP模版控制循环输出

    <volist name="data" id="vo"> <div class="case1_01 flexslider" ...

  8. docker 跨主机网络:overlay 简介

    简介 docker 在早前的时候没有考虑跨主机的容器通信,这个特性直到 docker 1.9 才出现.在此之前,如果希望位于不同主机的容器能够通信,一般有几种方法: 使用端口映射:直接把容器的服务端口 ...

  9. 如何让Myeclipse已经关闭掉的项目不显示出来

    一.打开Package Explorer视图,在它的右上角有一个向下的三角图标. 2.点击后选择Filters,在弹出的Filter配置窗口中选中"Closed Projects" ...

  10. 关于C语言中结构体大小计算

    结构体大小的计算,.网上说法一大堆还都不一样分什么对齐不对齐,偏移量什么的.. 在此稍微举例简单总结下: 对齐原则:每一成员的结束偏移量需对齐为后一成员类型的倍数  补齐原则:最终大小补齐为成员中最大 ...