Slim Span POJ 3522 (最小差值生成树)
题意:
最小生成树找出来最小的边权值总和使得n个顶点都连在一起。那么这找出来的边权值中的最大权值和最小权值之差就是本题的结果
但是题目要求让这个输出的结果最小,也就是差值最小。那么这就不是最小生成树了
题解:
思路1、
让所有边这个权值从小到大排序,之后一个权值一个权值的枚举,枚举那个权值就证明我们肯定会用到这个权值,然后让这个权值和其他边的权值做差
用这个差来代替原来的权值,再去进行最小生成树
思路2、
让所有边这个权值从小到大排序,之后一个权值一个权值的枚举,枚举到的这个权值代表我们用来连接的n个点的所有边中权值最小值就是它
然后再进行最小生成树,只要边的权值小于它的都不用这条边
代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<vector>
6 #include<queue>
7 using namespace std;
8 const int maxn=105;
9 const int INF=0x3f3f3f3f;
10 int n,m,fa[maxn];
11 struct shudui
12 {
13 int u,v,w;
14 } e[maxn*maxn];
15 bool mmp(shudui x,shudui y)
16 {
17 return x.w<y.w;
18 }
19 int finds(int x)
20 {
21 if(x!=fa[x])
22 {
23 int y=finds(fa[x]);
24 fa[x]=y;
25 return y;
26 }
27 return x;
28 }
29 void init()
30 {
31 for(int i=1; i<=n; ++i)
32 {
33 fa[i]=i;
34 }
35 }
36 int main()
37 {
38 while(~scanf("%d%d",&n,&m))
39 {
40 if(!n && !m) break;
41 //memset(mp,0,sizeof(mp));
42 for(int i=1; i<=m; ++i)
43 {
44 int u,v,w;
45 scanf("%d%d%d",&u,&v,&w);
46 e[i].u=u;
47 e[i].v=v;
48 e[i].w=w;
49 }
50 e[0].w=-1;
51 init();
52 sort(e+1,e+1+m,mmp);
53 int minn=INF,flag=0;
54 if(m==0) flag=1;
55 for(int i=1; i<=m; ++i)
56 {
57 if(e[i].w!=e[i-1].w)
58 {
59 init();
60 int ans=0;
61 for(int j=i; j<=m; ++j)
62 {
63 int x=e[j].u;
64 int y=e[j].v;
65 int z=e[j].w;
66 int fx=finds(x);
67 int fy=finds(y);
68 if(fx!=fy)
69 {
70 fa[fx]=fy;
71 ++ans;
72 }
73 if(ans==n-1)
74 {
75 //if(i!=1)
76 //minn=min(minn,z-e[i-1].w);
77 //else
78 minn=min(minn,z-e[i].w);
79 //printf("%d %d %d\n",i,z,e[i-1].w);
80 }
81 }
82 if(ans!=n-1 && i==1)
83 {
84 flag=1;
85 break;
86 }
87 }
88 }
89 if(!flag)
90 printf("%d\n",minn);
91 else printf("-1\n");
92 }
93 return 0;
94 }
Slim Span POJ 3522 (最小差值生成树)的更多相关文章
- POJ 3522 最小差值生成树(LCT)
题目大意:给出一个n个节点的图,求最大边权值减去最小边权值最小的生成树. 题解 Flash Hu大佬一如既往地强 先把边从小到大排序 然后依次加入每一条边 如果已经连通就把路径上权值最小的边删去 然后 ...
- LuoguP4234_最小差值生成树_LCT
LuoguP4234_最小差值生成树_LCT 题意: 给出一个无向图,求最大的边权减最小的边权最小的一棵生成树. 分析: 可以把边权从大到小排序,然后类似魔法森林那样插入. 如果两点不连通,直接连上, ...
- [luogu4234]最小差值生成树
[luogu4234]最小差值生成树 luogu 从小到大枚举边,并连接,如果已连通就删掉路径上最小边 lct维护 \(ans=min(E_{max}-E_{min})\) #include<b ...
- P4234 最小差值生成树
题目 P4234 最小差值生成树 做法 和这题解法差不多,稍微变了一点,还不懂就直接看代码吧 \(update(2019.2):\)还是具体说一下吧,排序,直接加入,到了成环情况下,显然我们要把此边代 ...
- POJ 3522 Slim Span 最小差值生成树
Slim Span Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3522 Description Gi ...
- 洛谷.4234.最小差值生成树(LCT)
题目链接 先将边排序,这样就可以按从小到大的顺序维护生成树,枚举到一条未连通的边就连上,已连通则(用当前更大的)替换掉路径上最小的边,这样一定不会更差. 每次构成树时更新答案.答案就是当前边减去生成树 ...
- TZOJ 3710 修路问题(最小差值生成树kruskal或者LCT)
描述 xxx国“山头乡”有n个村子,政府准备修建乡村公路,由于地形复杂,有些乡村之间可能无法修筑公路,因此政府经过仔细的考察,终于得到了所有可能的修路费用数据.并将其公布于众,广泛征求村民的修路意见. ...
- 【刷题】洛谷 P4234 最小差值生成树
题目描述 给定一个标号为从 \(1\) 到 \(n\) 的.有 \(m\) 条边的无向图,求边权最大值与最小值的差值最小的生成树. 输入输出格式 输入格式: 第一行两个数 \(n, m\) ,表示图的 ...
- 洛谷P4234 最小差值生成树(lct动态维护最小生成树)
题目描述 给定一个标号为从 11 到 nn 的.有 mm 条边的无向图,求边权最大值与最小值的差值最小的生成树. 输入输出格式 输入格式: 第一行两个数 n, mn,m ,表示图的点和边的数量. ...
随机推荐
- Flutter 布局类组件:层叠布局(Stack和Positioned)
前言 层叠布局,即子组件可以根据距父容器四个角的位置来确定自身的位置.绝对定位运行子组件堆叠起来,即按照代码中声明的顺序. Flutter中使用Stack和Positioned这两个组件来配合实现绝对 ...
- 【Oracle】修改列的大小
alter table 表名 modify column_name varchar2(32) alter table 表名 modify (column_name1 varchar(20) defa ...
- leetcode 886. 可能的二分法(DFS,染色,种类并查集)
题目链接 886. 可能的二分法 题意: 给定一组 N 人(编号为 1, 2, ..., N), 我们想把每个人分进任意大小的两组. 每个人都可能不喜欢其他人,那么他们不应该属于同一组. 形式上,如果 ...
- 2.4V升3.3V,2.4V升3V,1A大电流升压芯片
两节镍氢电池串联就是1.2V+1.2V=2.4V的供电电压了,2.4V升3V, 2.4V升3.3V的话,就能稳压稳定给模块供电了,镍氢电池是会随着使用的电池电量减少的话,电池的电压也是跟着变化的,导致 ...
- 【JeecgBoot】关于 jeecg-boot 的项目理解、使用心得和改进建议
工欲善其事,必先利其器. 脚手架选型 一年前,我接到为团队落地一个快速开发脚手架的任务. 在月底这节骨眼上,时间紧,任务急,有想自己撸一个脚手架的人都赶紧把这想法收起来吧!这劳民又伤身的事咱肯定是不能 ...
- 【CentOS7】Apache发布静态网页-超简单
目前能够提供Web网络服务的程序有 IIS. Nginx和 Apache等.其中,IIS (Internet Information Services,互联网信息服务)是 Windows系统中默认的 ...
- 使用amoeba实现mysql读写分离
使用amoeba实现mysql读写分离 1.什么是amoeba? Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明. ...
- Spark SQL如何选择join策略
前言 众所周知,Catalyst Optimizer是Spark SQL的核心,它主要负责将SQL语句转换成最终的物理执行计划,在一定程度上决定了SQL执行的性能. Catalyst在由Optimiz ...
- Git提交代码规范 而且规范的Git提交历史,还可以直接生成项目发版的CHANGELOG(semantic-release)
Git提交代码规范 - 木之子梦之蝶 - 博客园 https://www.cnblogs.com/liumengdie/p/7885210.html Commit message 的格式 Git 每次 ...
- <script>元素
简介 向HTML页面中插入JavaScript的主要方法,就是使用'<'script'>'元素. 标签的位置 现代Web应用程序一般都把全部的JavaScript饮用放在'<'bod ...