【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 < ...
随机推荐
- 【Java基础】网络编程
网络编程 网络编程概述 网络编程的目的:直接或简洁地通过网络协议与其他计算机实现数据交换,进行通讯. 网络编程的两个主要问题: 如果准确地定位网络上一台或多台主机,并定位主机上的特定应用: 找到主机后 ...
- RecyclerView 源码分析(一) —— 绘制流程解析
概述 对于 RecyclerView 是那么熟悉又那么陌生.熟悉是因为作为一名 Android 开发者,RecyclerView 是经常会在项目里面用到的,陌生是因为只是知道怎么用,但是却不知道 Re ...
- 九:APP及其他资产
APP提取一键反编译提取 APP抓数据包进行工具配合 各种第三方应用相关探针技术 各种服务器接口相关探针技术 APP提取及抓包及后续配合 某APK一键提取反编译 利用burp历史抓更多URL 某IP无 ...
- Payment Spring Boot 1.0.4.RELEASE 发布,最易用的微信支付 V3 实现
Payment Spring Boot 是微信支付V3的Java实现,仅仅依赖Spring内置的一些类库.配置简单方便,可以让开发者快速为Spring Boot应用接入微信支付. 欢迎ISSUE,欢迎 ...
- Linux下安装配置rocketmq (单个Master、双Master)
一.环境: centos7(2台虚拟机):192.168.64.123:192.168.64.125 apache-maven-3.2.5(官网要求maven版本是3.2.x,版本不同,编译rocke ...
- 24V降压3.3V芯片,低压降线性稳压器
PW6206系列是一款高精度,高输入电压,低静态电流,高速,低压降线性稳压器具有高纹波抑制.在VOUT=5V&VIN=7V时,输入电压高达40V,负载电流高达300mA,采用BCD工艺制造.P ...
- uni-app开发经验分享八: 实现微信APP支付的全过程详解
背景 最近项目使用uni-app实现微信支付,把过程简单记录下,帮助那些刚刚基础uni-app,苦于文档的同学们.整体来说实现过程和非uni-app的实现方式没有太大不同,难点就在于uni-app对于 ...
- Py层次递进与文件修改大程序,模块,name与file
层次的递进与返回 #输入quit的时候返回上一阶层,输入exit退出所有的循环 tag=True while tag==True: level1=input('level1:') if level1= ...
- Tensorflow-线性回归与手写数字分类
线性回归 步骤 构造线性回归数据 定义输入层 设计神经网络中间层 定义神经网络输出层 计算二次代价函数,构建梯度下降 进行训练,获取预测值 画图展示 代码 import tensorflow as t ...
- STL_常用的算法
STL_常用的算法 一.常用的查找算法 adjacent_find() adjacent_find(iterator beg, iterator end, _callback); 在iterator对 ...