题目大意:给一张无向图,找出最小生成树和次小生成树。

题目分析:模板题。。。方法就是枚举所有的比最小生成树中两端点之间的最长边还要长的边,用它替换,再取一个最小的值便是次小生成树了。

代码如下:

  1. # include<iostream>
  2. # include<cstdio>
  3. # include<cstring>
  4. # include<cstring>
  5. using namespace std;
  6. # define REP(i,s,n) for(int i=s;i<n;++i)
  7. # define CL(a,b) memset(a,b,sizeof(a))
  8. # define CLL(a,b,n) fill(a,a+n,b)
  9.  
  10. const int N=105;
  11. const int INF=1<<30;
  12. int n,m,dis[N],dp[N][N],G[N][N],G1[N][N],vis[N];
  13.  
  14. int prim()
  15. {
  16. REP(i,0,n) REP(j,i,n) G1[i][j]=G1[j][i]=INF;
  17. CLL(dis,INF,n);
  18. CL(vis,0);
  19. REP(i,0,n) dis[i]=G[0][i];
  20. dis[0]=0;
  21. vis[0]=1;
  22. int res=0;
  23. REP(k,1,n){
  24. int minn=INF,u;
  25. REP(i,0,n) if(!vis[i]&&minn>dis[i]){
  26. minn=dis[i];
  27. u=i;
  28. }
  29. res+=dis[u];
  30. vis[u]=1;
  31. REP(i,0,n) if(vis[i]&&G[i][u]==dis[u]){
  32. G1[i][u]=G1[u][i]=dis[u];
  33. break;
  34. }
  35. REP(i,0,n) if(!vis[i]&&dis[i]>G[u][i])
  36. dis[i]=G[u][i];
  37. }
  38. return res;
  39. }
  40.  
  41. void dfs(int rt,int u,int w)
  42. {
  43. if(dp[rt][u]!=-1) return ;
  44. dp[rt][u]=w;
  45. REP(i,0,n) if(G1[u][i]!=INF)
  46. dfs(rt,i,max(w,G1[u][i]));
  47. }
  48.  
  49. int main()
  50. {
  51. int T,a,b,c;
  52. scanf("%d",&T);
  53. while(T--)
  54. {
  55. scanf("%d%d",&n,&m);
  56. REP(i,0,n) REP(j,i,n) G[i][j]=G[j][i]=INF;
  57. while(m--)
  58. {
  59. scanf("%d%d%d",&a,&b,&c);
  60. --a,--b;
  61. G[a][b]=G[b][a]=c;
  62. }
  63. int MST=prim();
  64. CL(dp,-1);
  65. REP(i,0,n) dfs(i,i,0);
  66. int MST1=INF;
  67. REP(i,0,n) REP(j,i+1,n){
  68. if(G[i][j]==INF||G1[i][j]<INF||G[i][j]<dp[i][j]) continue;
  69. MST1=min(MST1,MST-dp[i][j]+G[i][j]);
  70. }
  71. printf("%d %d\n",MST,MST1);
  72. }
  73. return 0;
  74. }

  

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

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

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

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

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

  3. uva 10600 ACM Contest And Blackout

    题意: 求最小生成树和次小生成树的总权值. 思路: 第一种做法,适用于规模较小的时候,prim算法进行的时候维护在树中两点之间路径中边的最大值,复杂度O(n^2),枚举边O(m),总复杂度O(n^2) ...

  4. UVA10600 ACM Contest and Blackout —— 次小生成树

    题目链接:https://vjudge.net/problem/UVA-10600 In order to prepare the “The First National ACM School Con ...

  5. UVA10600:ACM Contest and Blackout(次小生成树)

    ACM Contest and Blackout 题目链接:https://vjudge.net/problem/UVA-10600 Description: In order to prepare ...

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

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

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

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

  8. UVA10600 ACM Contest and Blackout

    用prim算法求最小生成树和次小生成树~ #include<cstdio> #include<algorithm> #include<cstring> using ...

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

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

随机推荐

  1. CodeForces 651 C Watchmen

    C. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input o ...

  2. Visual Studio的“Waiting for a required operation to complete...”问题

    自从使用Visual Studio 2013之后,多次遇到这个恼人的“Waiting for a required operation to complete...”问题. 问题发生于在Visual ...

  3. SQL---->数据库表设计思想

    数据,一对多: 多的表中加外健约束 数据,多对多: 创建中间表,中间表中有关系对应的外健约束 数据一对一: 主从关系,从表中加外健约束,加唯一约束,加非空约束!!!!! 一张表中-自连接:(理论可以, ...

  4. pandas读取保存数据

    将本人使用过的一些操作记录下来 1.读取数据,使用:data = pd.read_csv('./data/file.csv') 2.数据处理,如果你要修改某一个数据,其实把DATAFRAME数据看做是 ...

  5. Java的平台无关性如何体现出来的

    传统的编程中,源代码编译为可执行的代码后,只能针对特定的平台(操作系统),换句话说,针对Windows编写和编译的代码,只能在Windows上运行... java程序则编译为字节码.字节码本身不能运行 ...

  6. Spark-RDD算子

    一.Spark-RDD算子简介 RDD(Resilient Distributed DataSet)是分布式数据集.RDD是Spark最基本的数据的抽象. scala中的集合.RDD相当于一个不可变. ...

  7. Popular Cows---poj2186(缩点,强联通)

    题目链接:http://poj.org/problem?id=2186 求有多少个点满足其他n-1个点都能到达这个点,是单向图: 所以我们可以把图进行缩点,之后求出度为0的那个点内包含的点的个数就是求 ...

  8. android进入页面会定位到ListView问题解决方法

    在我们的页面中如果存在有ListView,当我们进入这个activity时,页面会定位到ListView的位置去,而不是activity的头部,这是由于ListView会去默认获取焦点所造成的. 解决 ...

  9. Mybatis三剑客之mybatis-plugin

    搜索mybatis plugin并安装. 如果没有的话,就按照如下: 1. 简介     mybatis plugin作为一款优秀的mybatis跳转插件,比起free mybatis plugin插 ...

  10. matplotlib-折线图、散点图

    (一)折线图小结 1.设置图片大小(想要一个高清无码大图) # 图大小 plt.figure(figsize=(20, 8), dpi=80) 2.保存到本地 # 设置图片大小 plt.figure( ...