【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 < ...
随机推荐
- 【IMPDP】ORA-31655
出现ora-31655错误的情况是因为不是同一个schema,导致的问题产生 解决的方法; 在导入语句最后添加上remap_schema=old:new 着old是原schema,也就是导出的用户名, ...
- 使用Adobe Arcobat Pro DC生成PDF提示“PDFMaker文件遗失”新解决思路
环境: 1.Window 7 2.Adobe Arcobat Pro DC 2020.009.20065 3.Microsoft Office 2007 4.WPS 2019 虽然可以使用插件实现文件 ...
- D2Admin 登录用户重新初始话右侧菜单
背景 最近用到D2Admin开发项目,用户登录菜单要根据用户角色权限获取,但是又不想用官网的方案(vue基于d2-admin的RBAC权限管理解决方案),所以自己加了个只修改 menuAside的方案 ...
- Ice系列--傻瓜式服务开发IceBox
前言 相信大家在没有接触过框架之前,都自己或多或少的开发过一些应用服务.每个应用服务除了业务配置还有很多环境配置,资源配置等,这些跟部署相关的配置.服务跟配置文件是一种静态绑定的方式,更新配置还需要重 ...
- 《awk中文手册》-本人参考官方手册翻译
01. 简介 AWK是一个文本(面向行和列)处理工具,同时它也是一门脚本语言. AWK其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernigha ...
- php artisan db:seed 报错
在laravel 5中执行,要执行数据填充时报如下错误 php artisan db:seed 错误: [ReflectionException] Cla ...
- hive搜索报错
在自己搭建的集群上执行hive搜索语句 select count(*) from ods_event_log where dt='2019-12-14' group by dt; 报错如下: Stat ...
- UNIX DOMAIN SOCKETS IN GO unix域套接字
Unix domain sockets in Go - Golang News https://golangnews.org/2019/02/unix-domain-sockets-in-go/ pa ...
- 京东热 key 探测框架新版发布,单机 QPS 可达 35 万
https://mp.weixin.qq.com/s/3URAvUF6zwxeF5Kkc1aWHA 京东热 key 探测框架新版发布,单机 QPS 可达 35 万 原创 Hollis Hollis 2 ...
- 实现一个List集合中的某个元素的求和
List<User> userlist = userService.findAll();Integer sum= userlist .stream().collect(Collectors ...