题意:

一棵生成树的苗条度被定义为最长边与最小边的差。

给出一个图,求其中生成树的最小苗条度。

思路:

最开始想用二分,始终想不到二分终止的条件,所以尝试暴力枚举最小边的长度,然后就AC了。

粗略估计最大规模为1e8,用时2873ms,卡着时间过。

一个不明显的优化是枚举输入的每一条边。

代码:

 #include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; const int inf = 0x3f3f3f3f; int mp[][];
bool vis[];
int d[]; int prim(int n,int lim)
{
memset(vis,,sizeof(vis));
memset(d,inf,sizeof(d)); vis[] = ;
d[] = ; int mx = ,mn = inf; for (int i = ;i <= n;i++)
{
if (mp[][i] >= lim) d[i] = mp[][i];
} for (int i = ;i < n - ;i++)
{
//printf("2333\n"); int x,dis = inf; for (int j = ;j <= n;j++)
{
if (!vis[j] && d[j] < dis && d[j] >= lim)
{
dis = d[j];
x = j;
}
} if (dis == inf) return -; vis[x] = ; mx = max(mx,dis);
mn = min(mn,dis); for (int j = ;j <= n;j++)
{
if (!vis[j] && mp[x][j] < d[j] && mp[x][j] >= lim)
{
d[j] = mp[x][j];
}
}
} return mx - mn;
} int main()
{
int n,m; while (scanf("%d%d",&n,&m) != EOF)
{
if (n == && m == ) break; memset(mp,inf,sizeof(mp)); int mxl = ,mnl = inf; for (int i = ;i < m;i++)
{
int a,b,c; scanf("%d%d%d",&a,&b,&c); mp[a][b] = mp[b][a] = c; mxl = max(mxl,c);
mnl = min(mnl,c);
} int ans = prim(n,mnl); if (ans == -) printf("-1\n");
else
{
for (int i = mnl;i <= mxl;i++)
{
int tmp = prim(n,i); if (tmp == -) break;
else ans = min(ans,tmp);
} printf("%d\n",ans);
}
} return ;
}

uvalive 3887 Slim Span的更多相关文章

  1. [LA 3887] Slim Span

    3887 - Slim SpanTime limit: 3.000 seconds Given an undirected weighted graph G <tex2html_verbatim ...

  2. LA 3887 - Slim Span 枚举+MST

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  3. 最小生成树POJ3522 Slim Span[kruskal]

    Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7594   Accepted: 4029 Descrip ...

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

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

  5. poj 3522 Slim Span (最小生成树kruskal)

    http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions ...

  6. POJ-3522 Slim Span(最小生成树)

    Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8633   Accepted: 4608 Descrip ...

  7. Slim Span(Kruskal)

    题目链接:http://poj.org/problem?id=3522   Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Subm ...

  8. POJ 3522 Slim Span(极差最小生成树)

    Slim Span Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 9546   Accepted: 5076 Descrip ...

  9. UVALive-3887 Slim Span (kruskal)

    题目大意:定义无向图生成树的最大边与最小边的差为苗条度,找出苗条度最小的生成树的苗条度. 题目分析:先将所有边按权值从小到大排序,在连续区间[L,R]中的边如果能构成一棵生成树,那么这棵树一定有最小的 ...

随机推荐

  1. 解决双系统(Window10+Ubuntu16.10)下ubuntu安装git时提示软件包git没有可安装候选问题

    选择升级系统: sudo apt-get update 升级之后再输入: sudo apt-get install git 可成功安装.

  2. 用promise和async/await分别实现红绿灯

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. python中的list以及list与array相互转换

    python中的list是一种有序集合,可以随时增删元素: # -*- coding: utf-8 -*- frameID = 1 frameID_list = [] frameID_list.app ...

  4. SpringBoot-热部署Devtools

    热部署 什么是热部署 所谓的热部署:比如项目的热部署,就是在应用程序在不停止的情况下,实现新的部署 项目演示案例 @RestController @Slf4j public class IndexCo ...

  5. 【SQL】group by 和order by 的区别。

    group by 分组,比如group by name.那么重复name就显示一遍,即同样内容归类显示一遍. group by ……having……——(where 后不可以接聚合函数,而having ...

  6. 前端HTML目录

    前端 HTML 简介 前端 HTML文档结构介绍 前端 HTML文档 详解 前端 HTML 注释 前端 HTML标签介绍 前端 HTML的规范 前端 HTML 常用标签 head标签相关内容 前端 H ...

  7. 要继续看Python写算法的内容请到那里去

    由于在这里发文章的时候.莫名其妙的出现公布出去的问题.客服告知是由于链接或者敏感词. 能不能告诉我哪里出了问题?我能够改动,以便再发. 可是,没有人告诉我.仅仅是告诉我不能发. 另外,能不能公布一下敏 ...

  8. 将 java 改写成 beanshell 的经验之谈

    下面经验仅仅针对 bsh for android 而谈, PC 上 beanshell 无需这样改. public class TimeTest  改写为闭包: TimeTest()  闭包末尾添加语 ...

  9. mysql开发总结

    一.理解MySQL基本概念 1.MySQL软件:MySQL实际上就是一软件,是一工具,是关系型数据库管理系统软件 2.MySQL数据库:就是按照数据结构来组织.存储和管理数据的仓库 3.MySQL数据 ...

  10. 微信小程序echart 折线图legend不显示的问题

    最近使用小程序echart折线图,遇到表头一直不显示问题,查询之后解决方案: