题意:

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

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

思路:

最开始想用二分,始终想不到二分终止的条件,所以尝试暴力枚举最小边的长度,然后就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. 应用docker化

    1)首先安装源代码工具Git.  [root@master~]# yum install-y git  2)从GitHub上下载示例的Java应用源代码.  [root@master~]# cd/op ...

  2. HashMap如何解决取Value值为Null

    场景: 用HashMap方法时候,取Keys时候自认为敲的肯定是准确无误,然后能得到对应的Values 值.  但写脚本代码时候不好习惯,没事总喜欢敲个空格建,导致取Keys之后多空格. Featur ...

  3. Erlang调度器

    1. Erlang 抢占式调度 Erlang实现公平调度基于Reduction Budget(运行次数限制).每一个进程创建时初始reduction budget值为2000,任何Erlang系统中的 ...

  4. List去重问题

    如果集合中的数据类型是基本数据类型,可以直接将list集合转换成set,就会自动去除重复的元素,这个就相对比较简单. public class Test { public static void ma ...

  5. 【SQL】from a,b。表a 和b之间是什么关系?

    1.select a.id from a,b……——>这里a和b用逗号隔开,a,b之间默认是inner join的关系.

  6. 移动端rem布局(阿里)

    该方案使用相当简单,把下面这段已压缩过的 原生JS(源码已在文章底部更新,2017/5/3) 放到 HTML 的 head 标签中即可(注:不要手动设置viewport,该方案自动帮你设置) < ...

  7. 帝国cms修改栏目后文章列表的url错误怎么解决

    修改了某个栏目的目录地址,原本是/abc/,现在改成了/ab/,重新生成了栏目页面/ab/和文章页面/ab/*.html,但是栏目页的列表文章url还是/abc/*.html(正确的url应该是/ab ...

  8. what's the 二叉树

    what's the 树 在了解二叉树之前,首先我们得有树的概念. 树是一种数据结构又可称为树状图,如文档的目录.HTML的文档树都是树结构,它是由n(n>=1)个有限节点组成一个具有层次关系的 ...

  9. oracle添加字段,备注

    1.添加字段: alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ; 2.添加备注: comment on ...

  10. java 根据word xml模板生成word

    这里用的是poi相关jar包以及freemarker插值技术实现,poi相关jar包这里不再述说 1,编辑word并保存为xml 2,把xml后缀改为ftl文件 3,前端代码 // alert(jso ...