最大边和最小边之差最小的生成树 UVA 1394
题目大意:给你n个点的图,求苗条度(最大边减最小编)尽量小的生成树
思路:sort以后暴力枚举区间即可
//看看会不会爆int!数组会不会少了一维!
//取物问题一定要小心先手胜利的条件
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
const int inf = 0x3f3f3f3f;
const int maxn = + ;
struct Edge{
int u, v, val;
Edge(int u = , int v = , int val = ): u(u), v(v), val(val){}
bool operator < (const Edge &a) const{
return val < a.val;
}
}edges[maxn * maxn];
int par[maxn];
int n, m; void init(){for (int i = ; i <= n; i++) par[i] = i;}
int pfind(int x){
if (par[x] == x) return x;
return par[x] = pfind(par[x]);
} bool solve(int l, int r){
for (int i = l; i <= r; i++){
int pu = pfind(edges[i].u);
int pv = pfind(edges[i].v);
if (pu == pv) continue;
par[pu] = pv;
}
int p = pfind();
for (int i = ; i <= n; i++){
if (p != pfind(i)) return false;
}
return true;
} int main(){
while (scanf("%d%d", &n, &m) && n){
for (int i = ; i <= m; i++) {
int u, v, val; scanf("%d%d%d", &u, &v, &val);
edges[i] = Edge(u, v, val);
}
int ans = inf;
sort(edges + , edges + m + );
for (int l = ; l <= m; l++){
init();
for (int r = l; r <= m; r++){
if (solve(l, r)){
ans = min(ans, edges[r].val - edges[l].val);
break;
}
}
}
if (ans == inf) ans = -;
printf("%d\n", ans);
}
return ;
}
最大边和最小边之差最小的生成树 UVA 1394的更多相关文章
- poj3532求生成树中最大权与最小权只差最小的生成树+hoj1598俩个点之间的最大权与最小权只差最小的路经。
该题是最小生成树问题变通活用,表示自己开始没有想到该算法:先将所有边按权重排序,然后枚举最小边,求最小生成树(一个简单图的最小生成树的最大权是所有生成树中最大权最小的,这个容易理解,所以每次取最小边, ...
- IT公司100题-32-交换元素,使数组差最小
问题描述: 有两个整数序列a, b,大小都为n, 序列元素的值任意整数,无序. 要求:通过交换a, b 中的元素,使得sum(a)-sum(b),差最小. 例如: var a=[80, 40, 60, ...
- 如何交换两个等长整形数组使其数组和的差最小(C和java实现)
1. 问题描述: 有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使[数组a元素的和]与[数组b元素的和]之间的差最小. 2. 求解思路: 当前数组a和数组 ...
- 5-分西瓜差最小(背包 || dfs)
/* zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小 ...
- 通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小
题目描述: 有两个序列a,b,大小都为n,序列元素的值任意整数,无序:要求:通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小.例如:var a=[100,99,98, ...
- HDU 1171 Big Event in HDU【01背包/求两堆数分别求和以后的差最小】
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- Codeforces Round #448 (Div. 2) A. Pizza Separation【前缀和/枚举/将圆(披萨)分为连续的两块使其差最小】
A. Pizza Separation time limit per test 1 second memory limit per test 256 megabytes input standard ...
- OpenJudge计算概论-最大奇数与最小偶数之差的绝对值
/*============================================================= 最大奇数与最小偶数之差的绝对值 总时间限制: 1000ms 内存限制: ...
- bzoj 2229 [Zjoi2011]最小割(分治+最小割)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2229 [题意] 回答若干个关于割不超过x的点对数目的询问. [思路] [最小割最多有n ...
随机推荐
- Partial Tree
Partial Tree 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 完全背包 做这题前去学习了下完全背包,觉得这个优化简直神技!(以前都是 ...
- jquery 里 $(this)的用法
当遇到循环table时,查看其中的td.tr属性和值会有一点的麻烦.此时就必须使用$(this)来解决这一类的问题了. 1.直接使用 2.间接使用 <table> <?php for ...
- transform translate transition 的区别
transform是变形,下面有translate transform: rotate旋转/scale缩放/skew扭曲/translate移动/matrix矩阵变形transform连写:rotat ...
- win10应用UserControl
<Grid xmlns:src="using:UserControlExample" Margin="0,50,0,0"> <Grid.Row ...
- PAT 团体程序设计天梯赛-练习集L1-011. A-B
本题要求你计算A-B.不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A-B. 输入格式: 输入在2行中先后给出字符串A和B.两字符串的长度 ...
- KVC、KVO
概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听( ...
- GlusterFS缺点分析[转]
原文:http://blog.sina.com.cn/s/blog_6b89db7a0101gbcy.html GlusterFS(GNU ClusterFile System)是一个开源的分布式文件 ...
- scale相关设置—手动设置
在ggplot2 中,可以进行手动设置的函数有: scale_colour_manual(..., values).scale_fill_manual(..., values). scale_size ...
- OMCS开发手册(04) -- 二次开发流程
在掌握了前面几篇关于OMCS的详细介绍后,我们就可以正式基于OMCS进行二次开发了.下面我们就从服务端和客户端的角度分别介绍开发的步骤. 一.服务端开发 抛开具体的业务逻辑而言,就OMCS的服务端的开 ...
- apicloud ios 打包流程
1创建APP ID 等 2创建pruduction创建证书,用 这个证书导出P12格式的.. 3profile 证书,选 APP STORE AD-HOC ok... http://docs.api ...