描述

xxx国“山头乡”有n个村子,政府准备修建乡村公路,由于地形复杂,有些乡村之间可能无法修筑公路,因此政府经过仔细的考察,终于得到了所有可能的修路费用数据。并将其公布于众,广泛征求村民的修路意见。嗯,xxx国真是一个平等的国度。
政府考虑到费用问题,因此要求只能建n-1条公路,而且这n-1条公路还能连通n个村子,而且调查数据表明,这完全是可行的。
村民们展开了激烈的讨论,最后大家达成一致,要求每条路的费用要尽可能一样,这是基于“平等”的考虑,汗~
xxx国政府头脑简单,这这,太难了,最后双方又达成一致,那就保证费用最大的那条与费用最小的那条之间的费用之差尽可能最小吧。
现在的问题就交给你了,要你找出满足以上条件的一种方案,你只要输出费用最大的那条公路与费用最小的那条公路之间费用的差值w即可。嗯,因为这个数据还得告知村民,还是要“平等”。

输入

输入数据有多组。每组数据的第一行为两个整数n(2<n<=200)和m(m<=5000),表示村庄个数和可能的道路条数。
接下来有m行,每行3个整数ai bi wi,分别表示村庄ai和村庄bi之间可以修一条路,需要费用为wi,这里村庄从1~n进行编号。wi<=100000000。

输入以EOF结束,若不明白EOF结束的含义,请参考帮助

输出

每组数据在一行中输出一个整数,即题目描述中的w值。

样例输入

4 5
1 2 1
2 3 2
1 3 3
1 4 4
3 4 5

样例输出

2

题意

求一颗生成树,使得最大边-最小边差值最小

题解

这里用的是kruskal,O(m^2)

由于kruskal算法已经按边排序,所以最大边一定是最后加进去的那条

然后可以枚举最小边,跑kruskal找到最后加进去的边(最大边)

代码

 #include<bits/stdc++.h>
using namespace std; const int maxn=;
const int maxm=; struct edge
{
int u,v,w;
bool operator<(const edge &D)const{
return w<D.w;
}
}edges[maxm]; int F[maxn];
int Find(int x)
{
return F[x]==x?x:F[x]=Find(F[x]);
} int main()
{
int n,m;
while(cin>>n>>m)
{
for(int i=,u,v,w;i<m;i++)
{
cin>>u>>v>>w;
edges[i]=(edge){u,v,w};
}
sort(edges,edges+m);
int Min=2e9;
for(int i=;i<m;i++)
{
int Max,cnt=;
for(int j=;j<=n;j++)F[j]=j;
for(int j=i;j<m;j++)
{
edge &e=edges[j];
int fu=Find(e.u);
int fv=Find(e.v);
if(fu!=fv)
{
F[fu]=fv;
Max=e.w;
cnt++;
}
if(cnt==n-)break;
}
if(cnt==n-)Min=min(Min,Max-edges[i].w);
}
cout<<Min<<'\n';
}
return ;
}

TZOJ 3710 修路问题(最小差值生成树kruskal或者LCT)的更多相关文章

  1. LuoguP4234_最小差值生成树_LCT

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

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

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

  3. P4234 最小差值生成树

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

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

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

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

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

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

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

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

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

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

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

  9. P4234 最小差值生成树 LCT维护边权

    \(\color{#0066ff}{ 题目描述 }\) 给定一个标号为从 \(1\) 到 \(n\) 的.有 \(m\) 条边的无向图,求边权最大值与最小值的差值最小的生成树. \(\color{#0 ...

随机推荐

  1. poi excel

    使用apache的poi包可以对excel进行操作读取和写入. 因excel分为xls的2003版和xlsx的2007版,poi在创建workbook时使用不同的类创建,因此需要注意区分xls. Wo ...

  2. 页面中href链接的碰撞

    问题: 如上图动态生成一个li列表,点击之后页面直接全部刷新了一遍 原因: 动态生成的代码(第一个图)中href链接地址与顶部页面(上图)中固定的href链接存在冲突 如果动态生成的列表指定的链接名称 ...

  3. Delphi中TApplication详解(转仅供自己参考)

    转自:http://blog.sina.com.cn/s/blog_4d6f55d90100bmv9.html TApplication是用于Delphi应用程序的类型,该类在单元forms中声明.T ...

  4. JS基础一-入门知识

    一.什么是JavaScript JavaScript是一种基于对象和事件驱动并具有安全性能的解释性脚本语言.JavaScript不需要编译,直接嵌入在HTTP页面中,把静态页面转变成支持用户交互并响应 ...

  5. 转: HTML5之placeholder属性以及如何更改placeholder属性中文字颜色

    今天在群里看到群友问了一个这样的问题,就是如何更改placeholder属性中文字的颜色,以前用过这属性,却是没更改过颜色,于是便试了试,中途遇到些问题,查找资料后特来总结一下. 熟悉HTML5的人应 ...

  6. Java 指针or引用?

    由一个问题引出:Java到底是传引用还是传值? 如果是传引用,那么为何badSwap函数并没有如预想的那样交换变量? public void badSwap(int var1, int var2) { ...

  7. 118/119. Pascal's Triangle/II

    原文题目: 118. Pascal's Triangle 119. Pascal's Triangle II 读题: 杨辉三角问题 '''118''' class Solution(object): ...

  8. 我理解的BFC(块级格式化上下文)

    BFC(Block formatting context) 直译为"块级格式化上下文". BFC它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Bl ...

  9. (转).NET Core 使用 log4net

    https://blog.csdn.net/liyazhen2011/article/details/83382221 1.安装log4net     建立.NET Core工程 - 右键 - 管理N ...

  10. quartz整合spring框架service层对象注入为null解决方案

    Job实现类代码 package cn.itcast.quartz; import org.quartz.Job; import org.quartz.JobExecutionContext; imp ...