题意:

最小生成树找出来最小的边权值总和使得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 (最小差值生成树)的更多相关文章

  1. POJ 3522 最小差值生成树(LCT)

    题目大意:给出一个n个节点的图,求最大边权值减去最小边权值最小的生成树. 题解 Flash Hu大佬一如既往地强 先把边从小到大排序 然后依次加入每一条边 如果已经连通就把路径上权值最小的边删去 然后 ...

  2. LuoguP4234_最小差值生成树_LCT

    LuoguP4234_最小差值生成树_LCT 题意: 给出一个无向图,求最大的边权减最小的边权最小的一棵生成树. 分析: 可以把边权从大到小排序,然后类似魔法森林那样插入. 如果两点不连通,直接连上, ...

  3. [luogu4234]最小差值生成树

    [luogu4234]最小差值生成树 luogu 从小到大枚举边,并连接,如果已连通就删掉路径上最小边 lct维护 \(ans=min(E_{max}-E_{min})\) #include<b ...

  4. P4234 最小差值生成树

    题目 P4234 最小差值生成树 做法 和这题解法差不多,稍微变了一点,还不懂就直接看代码吧 \(update(2019.2):\)还是具体说一下吧,排序,直接加入,到了成环情况下,显然我们要把此边代 ...

  5. POJ 3522 Slim Span 最小差值生成树

    Slim Span Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3522 Description Gi ...

  6. 洛谷.4234.最小差值生成树(LCT)

    题目链接 先将边排序,这样就可以按从小到大的顺序维护生成树,枚举到一条未连通的边就连上,已连通则(用当前更大的)替换掉路径上最小的边,这样一定不会更差. 每次构成树时更新答案.答案就是当前边减去生成树 ...

  7. TZOJ 3710 修路问题(最小差值生成树kruskal或者LCT)

    描述 xxx国“山头乡”有n个村子,政府准备修建乡村公路,由于地形复杂,有些乡村之间可能无法修筑公路,因此政府经过仔细的考察,终于得到了所有可能的修路费用数据.并将其公布于众,广泛征求村民的修路意见. ...

  8. 【刷题】洛谷 P4234 最小差值生成树

    题目描述 给定一个标号为从 \(1\) 到 \(n\) 的.有 \(m\) 条边的无向图,求边权最大值与最小值的差值最小的生成树. 输入输出格式 输入格式: 第一行两个数 \(n, m\) ,表示图的 ...

  9. 洛谷P4234 最小差值生成树(lct动态维护最小生成树)

    题目描述 给定一个标号为从 11 到 nn 的.有 mm 条边的无向图,求边权最大值与最小值的差值最小的生成树. 输入输出格式 输入格式:   第一行两个数 n, mn,m ,表示图的点和边的数量. ...

随机推荐

  1. Centos 7 下的KVM虚拟机

    一 什么是KVM虚拟机: KVM虚拟机 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中. ...

  2. 2.jmeter组件介绍

    jmeter默认语言设置:  1.临时设置: 进入options -- Choose Language -- 选择中文简体,设置后语言  切换成中文,重启失效  2.永久设置:进入jmeter目录下的 ...

  3. 【ORA】ORA-27090: Unable to reserve kernel resources for asynchronous disk I/O

    操作系统是CentOS 5.11 数据库 10.2.0.5.0 晚上查看数据库,发现数据库报错查看相关的trace文件内容如下: *** SERVICE NAME:(SYS$BACKGROUND) 2 ...

  4. kubernets之job资源

    一  介绍job资源 1.1   前面介绍的RC,RS,DS等等,管控的pod都是需要长期持久的运行的应用,但是尝试考虑另外一种场景,在微服务的场景下,有些pod的作用就是需要 执行完一些命令之后正常 ...

  5. 用kubeadm+dashboard部署一个k8s集群

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: 1. 安装要求 在开始之前,部署Kubernetes集群 ...

  6. 一文说通Dotnet的委托

    简单的概念,也需要经常看看.   一.前言 先简单说说Delegate的由来.最早在C/C++中,有一个概念叫函数指针.其实就是一个内存指针,指向一个函数.调用函数时,只要调用函数指针就可以了,至于函 ...

  7. Less中Css预处理器

    Less.js 安装 npm install -g less 变量 basic 变量采用@进行变量定义.变量可以直接参加运算. @width:100px; .variables{ width:@wid ...

  8. Vue中组件间通信的方式

    Vue中组件间通信的方式 Vue中组件间通信包括父子组件.兄弟组件.隔代组件之间通信. props $emit 这种组件通信的方式是我们运用的非常多的一种,props以单向数据流的形式可以很好的完成父 ...

  9. API服务接口签名代码与设计,如果你的接口不走SSL的话?

    在看下面文章之前,我们先问几个问题 rest 服务为什么需要签名? 签名的几种方式? 我认为的比较方便的快捷的签名方式(如果有大神持不同意见,可以交流!)? 怎么实现验签过程 ? 开放式open ap ...

  10. MapReduce过程源码分析

    MapReduce过程源码分析 Mapper   首先mapper完成映射,将word映射成(word,1)的形式.   MapReduce进程,Map阶段也叫MapTask,在MapTask中会通过 ...