题意:

有n个点 每个点上有一些道路 求最小生成树

解释下输入格式

A n v1 w1 v2 w2

A点上有n条边 A到v1权值是w1 A到v2权值是w2

思路:

字符串处理之后跑kruskal求最小生成树

  1. /* ***********************************************
  2. Author :Sun Yuefeng
  3. Created Time :2016/11/9 18:26:37
  4. File Name :tree.cpp
  5. ************************************************ */
  6.  
  7. #include<cstdio>
  8. #include<iostream>
  9. #include<algorithm>
  10. #include<cmath>
  11. #include<cstring>
  12. #include<string>
  13. #include<bitset>
  14. #include<map>
  15. #include<set>
  16. #include<stack>
  17. #include<vector>
  18. #include<queue>
  19. #include<list>
  20. #define M(a,b) memset(a,b,sizeof(a))
  21. using namespace std;
  22. typedef long long ll;
  23. const int inf=0x3f3f3f3f;
  24. const int maxn=;
  25. const int maxm=;
  26. const int mod=1e7+;
  27. int dx[]= {,,,-,,-,,-};
  28. int dy[]= {,-,,,-,,,-};
  29.  
  30. int f[maxn],tol,n;
  31.  
  32. struct _edge
  33. {
  34. int u,v,w;
  35. friend bool operator < (const _edge a,const _edge b)
  36. {
  37. return a.w<b.w;
  38. }
  39. }edge[maxm];
  40.  
  41. void addedge(int u,int v,int w) //加边
  42. {
  43. edge[tol].u=u;
  44. edge[tol].v=v;
  45. edge[tol].w=w;
  46. tol++;
  47. }
  48.  
  49. int _find(int x) //并查集
  50. {
  51. if(f[x]==-) return x;
  52. else return f[x]=_find(f[x]);
  53. }
  54.  
  55. int kruskal()
  56. {
  57. M(f,-);
  58. sort(edge,edge+tol); //把所有的边排序
  59. int cnt=,ans=;
  60. int u,v,w,f1,f2;
  61. for(int i=;i<tol;i++) //从权值最小的边开始加
  62. {
  63. u=edge[i].u;
  64. v=edge[i].v;
  65. w=edge[i].w;
  66. f1=_find(u);
  67. f2=_find(v);
  68. if(f1!=f2) //判断是否成环
  69. {
  70. ans+=w;
  71. f[f1]=f2;
  72. cnt++;
  73. }
  74. if(cnt==n-) break;
  75. }
  76. //if(cnt<n-1) return -1; 判断图是否连通
  77. return ans;
  78. }
  79.  
  80. int main()
  81. {
  82. //freopen("in.txt","r",stdin);
  83. //freopen("out.txt","w",stdout);
  84. while(scanf("%d",&n)!=EOF&&n)
  85. {
  86. tol=;
  87. for(int i=;i<n-;i++)
  88. {
  89. char str[];
  90. int num,u,v,w;
  91. scanf("%s",str);
  92. u=str[]-'A';
  93. scanf("%d",&num);
  94. while(num--)
  95. {
  96. scanf("%s",str);
  97. v=str[]-'A';
  98. scanf("%d",&w);
  99. addedge(u,v,w);
  100. }
  101. }
  102. printf("%d\n",kruskal());
  103. }
  104. return ;
  105. }
  106. /*
  107.  
  108. 9
  109. A 2 B 12 I 25
  110. B 3 C 10 H 40 I 8
  111. C 2 D 18 G 55
  112. D 1 E 44
  113. E 2 F 60 G 38
  114. F 0
  115. G 1 H 35
  116. H 1 I 35
  117. 3
  118. A 2 B 10 C 40
  119. B 1 C 20
  120. 0
  121.  
  122. */

[ An Ac a Day ^_^ ] [kuangbin带你飞]专题六 最小生成树 POJ 1251 Jungle Roads的更多相关文章

  1. [kuangbin带你飞]专题六 最小生成树 POJ 2421 Constructing Roads

    给一个n个点的完全图 再给你m条道路已经修好 问你还需要修多长的路才能让所有村子互通 将给的m个点的路重新加权值为零的边到边集里 然后求最小生成树 #include<cstdio> #in ...

  2. [ An Ac a Day ^_^ ][kuangbin带你飞]专题六 最小生成树 POJ 2031 Building a Space Station

    最小生成树模板题 注意最后输出用%f (从C99开始%f已经不能用于输出double 即 输入用%lf 输出用%f) #include<cstdio> #include<algori ...

  3. [kuangbin带你飞]专题六 最小生成树 POJ 1287 Networking

    最小生成树模板题 跑一次kruskal就可以了 /* *********************************************** Author :Sun Yuefeng Creat ...

  4. [kuangbin带你飞]专题六 最小生成树

    学习最小生成树已经有一段时间了 做一些比较简单的题还算得心应手..花了三天的时间做完了kuangbin的专题 写一个题解出来记录一下(虽然几乎都是模板题) 做完的感想:有很多地方都要注意 n == 1 ...

  5. [kuangbin带你飞]专题六 最小生成树 N - 畅通工程再续

    相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全 ...

  6. [ An Ac a Day ^_^ ][kuangbin带你飞]专题八 生成树 POJ 1679 The Unique MST

    求最小生成树是否唯一 求一遍最小生成树再求一遍次小生成树 看看值是否相等就可以 #include<cstdio> #include<iostream> #include< ...

  7. [kuangbin带你飞]专题1-23题目清单总结

    [kuangbin带你飞]专题1-23 专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 Fli ...

  8. [kuangbin带你飞]专题十 匹配问题

        A-L 二分匹配 M-O 二分图多重匹配 P-Q 二分图最大权匹配 R-S 一般图匹配带花树 模板请自己找     ID Origin Title   61 / 72 Problem A HD ...

  9. [kuangbin带你飞]专题十 匹配问题 一般图匹配

    过去做的都是二分图匹配 即 同一个集合里的点 互相不联通 但是如果延伸到一般图上去 求一个一般图的最大匹配 就要用带花树来解决 带花树模板 用来处理一个无向图上的最大匹配 看了一会还是不懂  抄了一遍 ...

随机推荐

  1. asp.net内部原理3

    asp.net内部原理(三) 第三个版本 (最详细的版本) 前言: 今天继续吧这个系列补齐,这几天公司的项目比较忙,回到家已经非常的累了,所以也没顾得上天天来这里分享一些东西和大家一起探讨,但是今天晚 ...

  2. springMVC3学习(十一)--文件上传CommonsMultipartFile

    使用springMVC提供的CommonsMultipartFile类进行读取文件 需要用到上传文件的两个jar包 commons-logging.jar.commons-io-xxx.jar 1.在 ...

  3. springMVC3学习(七)--Interceptor拦截器

    Spring为我们提供了:org.springframework.web.servlet.HandlerInterceptor接口, org.springframework.web.servlet.h ...

  4. 开发框架(WinForm)3

    我的开发框架(WinForm)3 今天继续给大家介绍核心库的IOC的使用,在我的框架里,IOC使用的比较简单,主要是用于解除模块间的耦合和实例化接口. 1.接口说明,IocContainer接口比较简 ...

  5. [wp8游戏] cocos2d-x v2.2 + VS2013 环境搭建

    [wp8游戏] cocos2d-x v2.2 + VS2013 环境搭建 by:唐小崇 http://www.cnblogs.com/tangchong 从cocos2d-x v2.1.4 以来,co ...

  6. network重启失败原因

    /etc/sysconfig/network-scripts/ifcfg-eth0   DEVICE='eth0'  eth0后面千万不能加空格之类的  

  7. zookeeper使用跟原理

    zookeeper使用和原理 zookeeper介绍zookeeper是一个为分布式应用提供一致性服务的软件,它是开源的Hadoop项目中的一个子项目,并且根据google发表的<The Chu ...

  8. 飘逸的python - 简明gzip模块压缩教程

    压缩数据创建gzip文件 先看一个略麻烦的做法 import StringIO,gzip content = 'Life is short.I use python' zbuf = StringIO. ...

  9. 【汇编】字符串处理指令 stosb、lodsb、movsw、scasb、rep

    一.字符串处理指令 (1) lodsb.lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据DF标志增减SI (2) stosb.stosw:把AL或AX中的数据装入ES:DI指向的 ...

  10. 【转】double-array trie 译文+心得

    原文:http://blog.csdn.net/zzran/article/details/8462002 概论 下面将呈现一种新的内部数组结构,它便是double-array.double-arra ...