【uva 10600】ACM Contest and Blackout(图论--次小生成树 模版题)
题意:有T组数据,N个点,M条边,每条边有一定的花费。问最小生成树和次小生成树的权值。
解法:具体请见 关于生成树的拓展 {附【转】最小瓶颈路与次小生成树}(图论--生成树)
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<algorithm>
5 #include<iostream>
6 using namespace std;
7
8 const int N=105,M=5005,C=305;
9 int n,m,mm;
10 struct edge
11 {
12 int x,y,d,next;
13 edge() {}
14 edge(int i,int j,int k) {x=i;y=j;d=k;}
15 }e[M],ee[M];
16 int fa[N],last[N],vis[N];
17 int ve[M],f[N][N];
18
19 bool cmp(edge x,edge y) {return x.d<y.d;}
20 int mmax(int x,int y) {return x>y?x:y;}
21 int mmin(int x,int y) {return x<y?x:y;}
22
23 int ffind(int x)
24 {
25 if (fa[x]!=x) fa[x]=ffind(fa[x]);
26 return fa[x];
27 }
28 int MST()
29 {
30 int cnt=0,sum=0;
31 for (int i=1;i<=n;i++) fa[i]=i;
32 memset(ve,0,sizeof(ve));
33 sort(e+1,e+1+m,cmp);
34 for (int i=1;i<=m;i++)
35 {
36 int fx=ffind(e[i].x),fy=ffind(e[i].y);
37 if (fx!=fy)
38 {
39 fa[fx]=fy,ve[i]=1;
40 ee[++cnt]=e[i],sum+=e[i].d;
41 if (cnt==n-1) break;
42 }
43 }
44 mm=cnt;
45 return sum;
46 }
47 void build()
48 {
49 memset(last,0,sizeof(last));
50 for (int i=1;i<n;i++)
51 {
52 int x=ee[i].x,y=ee[i].y;
53 ee[i].next=last[x],last[x]=i;
54 ee[++mm]=edge(y,x,ee[i].d);
55 ee[mm].next=last[y],last[y]=mm;
56 }
57 }
58 void dfs(int x)
59 {
60 vis[x]=1;
61 for (int i=last[x];i;i=ee[i].next)
62 {
63 int y=ee[i].y;
64 if (vis[y]) continue;
65 for (int k=1;k<=n;k++)
66 if (vis[k]) f[k][y]=f[y][k]=mmax(f[k][x],ee[i].d);//要赋值2个f[][]
67 dfs(y);
68 }
69 }
70 int main()
71 {
72 int T;
73 scanf("%d",&T);
74 while (T--)
75 {
76 int x,y,d;
77 scanf("%d%d",&n,&m);
78 for (int i=1;i<=m;i++)
79 {
80 scanf("%d%d%d",&x,&y,&d);
81 e[i]=edge(x,y,d);
82 }
83 int mn=MST(),mmn=C*M;
84 build();//把最小生成树的边重新建树
85 memset(f,0,sizeof(f));
86 memset(vis,0,sizeof(vis));
87 dfs(1);//预处理f[x][y]:两点间路径的最大边权
88 for (int i=1;i<=m;i++)
89 {
90 if (ve[i]) continue;
91 mmn=mmin(mmn,mn-f[e[i].x][e[i].y]+e[i].d);//直接算出删除MST上的一条边时的MST,即次小生成树
92 }
93 printf("%d %d\n",mn,mmn);
94 }
95 return 0;
96 }
【uva 10600】ACM Contest and Blackout(图论--次小生成树 模版题)的更多相关文章
- [ An Ac a Day ^_^ ] [kuangbin带你飞]专题八 生成树 UVA 10600 ACM Contest and Blackout 最小生成树+次小生成树
题意就是求最小生成树和次小生成树 #include<cstdio> #include<iostream> #include<algorithm> #include& ...
- UVA10600:ACM Contest and Blackout(次小生成树)
ACM Contest and Blackout 题目链接:https://vjudge.net/problem/UVA-10600 Description: In order to prepare ...
- UVA 10600 ACM Contest and Blackout 次小生成树
又是求次小生成树,就是求出最小生成树,然后枚举不在最小生成树上的每条边,求出包含着条边的最小生成树,然后取一个最小的 #include <iostream> #include <al ...
- uva 10600 ACM Contest And Blackout
题意: 求最小生成树和次小生成树的总权值. 思路: 第一种做法,适用于规模较小的时候,prim算法进行的时候维护在树中两点之间路径中边的最大值,复杂度O(n^2),枚举边O(m),总复杂度O(n^2) ...
- UVA-10600 ACM Contest and Blackout (次小生成树)
题目大意:给一张无向图,找出最小生成树和次小生成树. 题目分析:模板题...方法就是枚举所有的比最小生成树中两端点之间的最长边还要长的边,用它替换,再取一个最小的值便是次小生成树了. 代码如下: # ...
- UVA-10600.Contest and Blackout.(Kruskal + 次小生成树)
题目链接 本题思路:模版的次小生成树问题,输出MST and Second_MST的值. 参考代码: #include <cstdio> #include <cstring> ...
- UVA10600 ACM Contest and Blackout —— 次小生成树
题目链接:https://vjudge.net/problem/UVA-10600 In order to prepare the “The First National ACM School Con ...
- 【uva 534】Frogger(图论--最小瓶颈路 模版题)
题意:平面上有N个石头,给出坐标.一只青蛙从1号石头跳到2号石头,使路径上的最长便最短.输出这个值.(2≤N≤200) 解法:最小瓶颈树.而由于这题N比较小便可以用2种方法:1.最短路径中提到过的Fl ...
- 【UVA 10600】 ACM Contest and Blackout(最小生成树和次小生成树)
[题意] n个点,m条边,求最小生成树的值和次小生成树的值. InputThe Input starts with the number of test cases, T (1 < T < ...
随机推荐
- 用python+sklearn(机器学习)实现天气预报数据 模型和使用
用python+sklearn机器学习实现天气预报 模型和使用 项目地址 系列教程 0.前言 1.建立模型 a.准备 引入所需要的头文件 选择模型 选择评估方法 获取数据集 b.建立模型 c.获取模型 ...
- MyBatis中id回填的两种方式
在一种场景下需要刚刚插入数据的ID,如果数据少可以先看数据库,记下ID,但数据很多,假设一万个用户并发,每个用户都插入自己的ID,就很难记下来. 下面给定一个场景: 1 User user = new ...
- OBKoro1的2020年年终总结
前言 一晃眼2020年马上就要过去了,今年感觉过的特别快. 工作已经三年了,之前都没有写过年终总结,结果造成了下面这个现象: 回首过去的几年,记忆已经很模糊了,需要很用力才能想起过去一部分往事. 人生 ...
- 坐上JDK8时间SDK的小船,带你遨游UNIX时间戳与时区的小太空~
原文链接:坐上JDK8时间SDK的小船,带你遨游UNIX时间戳与时区的小太空- 一.背景: 最近有一个关于店铺数据实时分析的需求,需要实时统计店铺当天的数据:例如访客数,浏览量.商品排行榜等.由于店铺 ...
- 【剑指 Offer】03.1.不修改数组找出重复的数字
找出数组中重复的数字. 在一个长度为 n + 1 的数组 nums 里的所有数字都在 1-n 的范围内.所以数组中至少有一个是重复的.请找出数组中任意一个重复的数字. 示例 1: 输入: [2, 3, ...
- Nginx安装步骤及本地浏览器不通解决方案,Nginx在Linux发布项目,Tomcat 与本地浏览器不通解决方案
Nginx安装步骤及本地浏览器不通解决方案 1.将安装包放到usr/local文件夹下 2..进入local目录,解压 tar -zxvf nginx-1.17.5.tar.gz 3.进入 nginx ...
- 【Linux】zabbix4.0服务器搭建,agent搭建,及邮件使用方法
zabbix默认的 服务端监听端口为10051,而被监控端即Zabbix--agents代理程序监控10050端口. 更新yum源: yum clean all yum makecache 需要配置网 ...
- Java高并发与多线程(四)-----锁
今天,我们开始Java高并发与多线程的第四篇,锁. 之前的三篇,基本上都是在讲一些概念性和基础性的东西,东西有点零碎,但是像文科科目一样,记住就好了. 但是本篇是高并发里面真正的基石,需要大量的理解和 ...
- Java基础复习3
循环的嵌套 public class demo8 { public static void main(String[] args) { /* 输出######## ...
- nokogiri Fail install on Ruby 2.3 for Windows #1456 <From github>
Q: gem install railson nokogiri install fail with error: 'nokogiri requires Ruby version < 2.3, & ...