【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 < ...
随机推荐
- Spark学习进度10-DS&DF基础操作
有类型操作 flatMap 通过 flatMap 可以将一条数据转为一个数组, 后再展开这个数组放入 Dataset val ds1=Seq("hello spark"," ...
- Linux复制某个目录下结构
Linux复制某个目录下结构 结合tree命令把当前目录下的文件夹路径存储到document.txt文件,然后再使用mkdir命令把document.txt文件下的目录输入创建: tree -fid ...
- ctfhub技能树—文件上传—.htaccess
首先介绍一下.htaccess(来自百度百科) .htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口).提供了针对目录改变配置的方法 ...
- 用其他主机docker login登录Harbor仓库报错
做微服务的时候,我准备把编译好的jar包,部署到我的Harbor仓库上,却登录不上去,出现以下报错: [root@k8s-master ~]# docker login 192.168.30.24Us ...
- [XAML] 使用 XAML 格式化工具:XAML Styler
1. XAML 的问题 刚入门 WPF/UWP 之类的 XAML 平台,首先会接触到 XAML 这一新事物.初学 XAML 时对它的印象可以归纳为一个词:一坨. 随着我在 XAML 平台上工作的时间越 ...
- SAP中数据库表长度的界定
SAP中,如何查看表和关键字的长度?通过SE11菜单栏Extras->table width 可以看到.然而SAP在系统也会将表分类,特别是在可扩展的表维护视图中,分为如下几类 ult ...
- 08--Docker安装Mysql
1.在hub.docker.com中查找5.7版本 2.拉取mysql docker pull mysql:5.7 3.启动mysql镜像 docker run -p 3306:3306 --name ...
- pscp 从win10远程传输文件到centos7,多个虚拟机之间传文件
一.将下载的pscp.exe拷贝到C:\Windows\System32 上传文件 win10 --> linux1 C:\Users\xy>pscp C:\BaiduNetdiskDow ...
- Java编程技术之浅析SPI服务发现机制
SPI服务发现机制 SPI是Java JDK内部提供的一种服务发现机制. SPI->Service Provider Interface,服务提供接口,是Java JDK内置的一种服务发现机制 ...
- JAVA高并发集合详解
Queue(队列)主要是为了高并发准备的容器Deque:双端队列,可以反方向装或者取 最开始jdk1.0只有Vector和hashtable 默认所有方法都实现了synchronized锁,线程安全但 ...