题意:

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

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

思路:

最开始想用二分,始终想不到二分终止的条件,所以尝试暴力枚举最小边的长度,然后就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. vue打包后出现"Failed to load resource: net::ERR_FILE_NOT_FOUND"错误

    创建vue脚手架搭建项目之后,用npm run build经行打包,运行index.html后出现异常: 打开dist/index.html, 诸如这些的,引入是有问题的, 这边的全部是绝对路径,而本 ...

  2. 八、自定义starter

    starter: 1.这个场景需要使用到的依赖是什么? 2.如何编写自动配置 @Configuration //指定这个类是一个配置类 @ConditionalOnXXX //在指定条件成立的情况下自 ...

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

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

  4. MongoDB update修改器: 针对Fields的$修改器 $inc $set $unset

    MongoDB update修改器: $inc $set $unset $push $pull $pop 针对Fields的$修改器 $set: { $set: { key: value } } $s ...

  5. 前端 HTML body标签相关内容 常用标签 表单标签 form 表单控件分类

    表单控件分类 input标签: input标签 type属性的text,password,button按钮,submit按钮 input标签placeholder属性 标签上显示内容 input标签 ...

  6. php 7 新特性整理小结

    php 7 比php 5 性能提升了很多,php 7 新特性主要表现在:1.变量存储字节减小,减少内存占用,提升变量操作速度:2.改善数组结构,数组元素和hash映射表被分配在同一块内存里,降低了内存 ...

  7. mysql 5.7.12 新增 X plugin x 协议 详解

    mysql 5.7.12 新增 X plugin  x 协议 详解http://xiaozhong991.blog.51cto.com/2354914/1763792 x 协议  操作nosql数据库 ...

  8. Element-diag中遮罩

    <el-dialog title="收货地址" :visible.sync="dialogFormVisible" append-to-body> ...

  9. 定义结构体和table type

    1: 在se11 中创建结构体 2: 定义一个内表, row type 使用structure类型,将会具有structure的字段. 3:在代码中 使用 结构体和table  type *& ...

  10. 根据构建类型动态设置AndroidManifest.xml文件中的meta-data

    当debug和release版本使用不同的值时,使用Gradle设置相应的值. Android主配置文件 <meta-data android:name="com.amap.api.v ...