题意:

现在给一个图,问最小生成树和次小生成树的权值和是多少;

思路:

求最小生成树的两种方法,次小生成树是交换最小生成树的其中一条边得到的,现在得到了最小生成树,枚举不在次小生成树中的边,再求一边最小生成树,这些最小生成树的最小权值就是次小生成树的权值了;

AC代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <stack>
  7.  
  8. using namespace std;
  9.  
  10. #define For(i,j,n) for(int i=j;i<=n;i++)
  11. #define mst(ss,b) memset(ss,b,sizeof(ss));
  12.  
  13. typedef long long LL;
  14.  
  15. template<class T> void read(T&num) {
  16. char CH; bool F=false;
  17. for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar());
  18. for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar());
  19. F && (num=-num);
  20. }
  21. int stk[70], tp;
  22. template<class T> inline void print(T p) {
  23. if(!p) { puts("0"); return; }
  24. while(p) stk[++ tp] = p%10, p/=10;
  25. while(tp) putchar(stk[tp--] + '0');
  26. putchar('\n');
  27. }
  28.  
  29. const LL mod=1e9+7;
  30. const double PI=acos(-1.0);
  31. const int inf=1e9;
  32. const int N=15e4+10;
  33. const int maxn=1e2+10;
  34. const double eps=1e-5;
  35.  
  36. int mp[maxn][maxn],vis[maxn],n,m,fa[maxn],ans1,ans2;
  37. int prim()
  38. {
  39. int lowcost[maxn],sum=0;
  40. mst(vis,0);
  41. vis[1]=1;
  42. For(i,2,n)lowcost[i]=mp[1][i],fa[i]=1;
  43. For(i,1,n)
  44. {
  45. int temp=inf,k;
  46. For(j,1,n)
  47. {
  48. if(!vis[j]&&lowcost[j]<temp)
  49. {
  50. temp=lowcost[j];
  51. k=j;
  52. }
  53. }
  54. if(temp==inf)break;
  55. sum+=temp;
  56. vis[k]=1;
  57. For(j,1,n)
  58. if(!vis[j]&&mp[k][j]<lowcost[j])lowcost[j]=mp[k][j],fa[j]=k;
  59. }
  60. return sum;
  61. }
  62. int secondprim()
  63. {
  64. int sum=inf,father[maxn];
  65. For(i,2,n)father[i]=fa[i];
  66. For(i,2,n)
  67. {
  68. int x=father[i];
  69. int temp=mp[x][i];
  70. mp[x][i]=mp[i][x]=inf;
  71. int y=prim();
  72. if(y>=ans1)sum=min(sum,y);
  73. mp[x][i]=mp[i][x]=temp;
  74. }
  75. return sum;
  76. }
  77. int main()
  78. {
  79. //freopen("in.txt","r",stdin);
  80. int t ;
  81. read(t);
  82. while(t--)
  83. {
  84. read(n);read(m);
  85. For(i,1,n)For(j,1,n)mp[i][j]=inf;
  86. int u,v,w;
  87. For(i,1,m)
  88. {
  89. read(u);read(v);read(w);
  90. mp[u][v]=mp[v][u]=w;
  91. }
  92. ans1=prim();
  93. ans2=secondprim();
  94. printf("%d %d\n",ans1,ans2);
  95. }
  96. return 0;
  97. }

  

UVA-10600(次小生成树)的更多相关文章

  1. UVA 10600 ACM Contest and Blackout 次小生成树

    又是求次小生成树,就是求出最小生成树,然后枚举不在最小生成树上的每条边,求出包含着条边的最小生成树,然后取一个最小的 #include <iostream> #include <al ...

  2. 【UVA 10600】 ACM Contest and Blackout(最小生成树和次小生成树)

    [题意] n个点,m条边,求最小生成树的值和次小生成树的值. InputThe Input starts with the number of test cases, T (1 < T < ...

  3. [ An Ac a Day ^_^ ] [kuangbin带你飞]专题八 生成树 UVA 10600 ACM Contest and Blackout 最小生成树+次小生成树

    题意就是求最小生成树和次小生成树 #include<cstdio> #include<iostream> #include<algorithm> #include& ...

  4. 【uva 10600】ACM Contest and Blackout(图论--次小生成树 模版题)

    题意:有T组数据,N个点,M条边,每条边有一定的花费.问最小生成树和次小生成树的权值. 解法:具体请见 关于生成树的拓展 {附[转]最小瓶颈路与次小生成树}(图论--生成树) 1 #include&l ...

  5. UVA - 10462-Is There A Second Way Left? Kruskal求次小生成树

    UVA - 10462 题意: 求次小生成树的模板题,这道题因为有重边的存在,所以用kruskal求比较好. #include <iostream> #include <cstdio ...

  6. UVA 10462 Is There A Second Way Left?(次小生成树&Prim&Kruskal)题解

    思路: Prim: 这道题目中有重边 Prim可以先加一个sec数组来保存重边的次小边,这样不会影响到最小生成树,在算次小生成树时要同时判断次小边(不需判断是否在MST中) Kruskal: Krus ...

  7. Qin Shi Huang's National Road System UVA - 1494(次小生成树)

    秦始皇统一中国之后要在全国修公路连接各个城市,皇帝只想修成最小生成树(距离最小,不考虑人力),一个道士说自己可以不花人力物力修一条路,经过两方妥协,选择max(两个城市人口/(生成树长度-这条路的长度 ...

  8. UVA 10462 Is There A Second Way Left? (次小生成树+kruskal)

    题目大意: Nasa应邻居们的要求,决定用一个网络把大家链接在一起.给出v个点,e条可行路线,每条路线分别是x连接到y需要花费w. 1:如果不存在最小生成树,输出“No way”. 2:如果不存在次小 ...

  9. [kuangbin带你飞]专题八 生成树 - 次小生成树部分

    百度了好多自学到了次小生成树 理解后其实也很简单 求最小生成树的办法目前遇到了两种 1 prim 记录下两点之间连线中的最长段 F[i][k] 之后枚举两点 若两点之间存在没有在最小生成树中的边 那么 ...

  10. kuangbin带你飞 生成树专题 : 次小生成树; 最小树形图;生成树计数

    第一个部分 前4题 次小生成树 算法:首先如果生成了最小生成树,那么这些树上的所有的边都进行标记.标记为树边. 接下来进行枚举,枚举任意一条不在MST上的边,如果加入这条边,那么肯定会在这棵树上形成一 ...

随机推荐

  1. ctrl+c,ctrl+d,ctrl+z在linux程序中意义和区别

    原文: http://blog.csdn.net/sxhlovehmm/article/details/41318111 [侵删] ctrl+c和ctrl+z都是中断命令,但是他们的作用却不一样.   ...

  2. Linux 下MySQL 安装与卸载

    这个写的比较好:http://www.cnblogs.com/starof/p/4680083.html 2.卸载系统自带的Mariadb rpm -qa|grep mariadb         / ...

  3. grafana 安装 和 Nginx 、EL 联调

    https://blog.csdn.net/u010735147/article/details/80943593

  4. Netty构建游戏服务器(一)--基本概念与原理

    一,Netty是什么 1,Netty是由 JBOSS提供的一个 java开源框架. 2,Netty是JAR包,一般使用ALL-IN-ONE的JAR包就可以开发了. 3,Netty不需要运行在Tomca ...

  5. P1067 多项式输出 (模拟)

    题目描述 一元nn次多项式可用如下的表达式表示: 其中,a_i x^i 称为i次项,ai​ 称为i次项的系数.给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式: 多项式中自变量 ...

  6. Spring 详解(一)------- AOP前序

    目录 1. AOP 简介 2. 示例需求 3. 解决方法一:使用静态代理 4. 解决方法二:使用动态代理 1. AOP 简介 ​ AOP(Aspect Oriented Programming),通常 ...

  7. NIO与传统IO的区别(形象比喻)[转]

    传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大.使用NIO,不再需要为每个线程创建单独的线程,可以用一个含有限数 ...

  8. Maven配置将war包部署到Tomcat(tomcat7-maven-plugin)

    Tomcat7/8: 提示:经过测试Tomcat7的配置和插件在Tomcat8中能正常运行 tomcat7-maven-plugin官方帮助文档:http://tomcat.apache.org/ma ...

  9. cut printf awk sed grep笔记

    名称 作用 参数 实例 cut 截取某列,可指定分隔 -f 列号 -d 分隔符 cut -d ":" -f 1, 3 /etc/passwd 截取第一列和第三列 printf pr ...

  10. LucaCanali--SystemTap_Linux_IO

    https://github.com/LucaCanali/Linux_tracing_scripts/tree/master/SystemTap_Linux_IO