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 ,表示图的点和边的数量. ...
随机推荐
- Spring Boot超详细用户管理项目(零)——开发前准备
开始前的软件准备:(编写中:未完成) 使用软件介绍: Java版本:Java SE 11(LTS) 开发工具:IDEA(2020.3版本) Linux系统: 数据库: Java 版本:Java SE ...
- GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?
目录 ✍前言 本文提纲 版本约定 ✍正文 GMT:格林威治时间 凭什么格林威治作为标准时间? 地球自转 中国有哪几个时区? 美国有哪几个时区? GMT和Http协议的渊源 UTC:世界标准时间 UTC ...
- 【Oracle】查看表或视图的创建语句
这里用到的是Oracle的DDL语句的用法 用于获得某个schema下所有的表.索引.视图.存储过程.函数的DDL set pagesize 0 set long 90000 set feedback ...
- ctfhub技能树—web前置技能—http协议—响应包源代码
打开靶机环境 查看网页是一个贪吃蛇小游戏 根据提示查看源码 发现flag 至此HTTP协议结束
- 通过logmnr找到被修改前的存储过程
1.找到存储过程被修改时的归档日志 SELECT NAME FROM V$ARCHIVED_LOG WHERE FIRST_TIME BETWEEN TO_DATE('20191118080000', ...
- 浅谈JavaScript代码性能优化
可以通过https://jsbench.me/测试网站完成性能测试. 一.慎用全局变量 1.全局变量定义在全局执行上下文,是所有作用域链的顶端,在局部作用域中没找到的变量都会到全局变量中去查找,所以说 ...
- JAVA获取当前文件路径this.getClass().getResource方法详细讲解
public class Test { public void run() { // TODO Auto-generated method stub System.out.println(" ...
- ElasticSearch Python 基本操作
创建索引 from elasticsearch import Elasticsearch es = Elasticsearch('192.168.149.96:9200') mappings = { ...
- STL_map和multimap容器
一.map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中key值是唯一的.集合中的元素按一定的顺 ...
- Python PyCharm安装第三方库
第一步:在PyCharm菜单中选择File--->Settings 第二步:在设置页出现的搜索框搜索:Project Interpreter 或者直接定位到此处 第三步:输入库名,搜索安装第三方 ...