uvalive 3887 Slim Span
题意:
一棵生成树的苗条度被定义为最长边与最小边的差。
给出一个图,求其中生成树的最小苗条度。
思路:
最开始想用二分,始终想不到二分终止的条件,所以尝试暴力枚举最小边的长度,然后就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的更多相关文章
- [LA 3887] Slim Span
3887 - Slim SpanTime limit: 3.000 seconds Given an undirected weighted graph G <tex2html_verbatim ...
- LA 3887 - Slim Span 枚举+MST
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 最小生成树POJ3522 Slim Span[kruskal]
Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7594 Accepted: 4029 Descrip ...
- POJ 3522 Slim Span 最小差值生成树
Slim Span Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3522 Description Gi ...
- poj 3522 Slim Span (最小生成树kruskal)
http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions ...
- POJ-3522 Slim Span(最小生成树)
Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 8633 Accepted: 4608 Descrip ...
- Slim Span(Kruskal)
题目链接:http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Subm ...
- POJ 3522 Slim Span(极差最小生成树)
Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 9546 Accepted: 5076 Descrip ...
- UVALive-3887 Slim Span (kruskal)
题目大意:定义无向图生成树的最大边与最小边的差为苗条度,找出苗条度最小的生成树的苗条度. 题目分析:先将所有边按权值从小到大排序,在连续区间[L,R]中的边如果能构成一棵生成树,那么这棵树一定有最小的 ...
随机推荐
- java之String类在堆栈存储机制
String类是一个比较特殊的类,最主要的体现是它有多种创建形式,例如,String a ="abc";Sting a=new("abc");表面上看得到的结果 ...
- Word Embedding理解
一直以来感觉好多地方都吧Word Embedding和word2vec混起来一起说,所以导致对这俩的区别不是很清楚. 其实简单说来就是word embedding包含了word2vec,word2ve ...
- No converter found for return value of type
springMVC请求接口的时候报500 No converter found for return value of type 原因:这是因为springmvc默认是没有对象转换成json的转换器 ...
- oracle按照指定列排序操作
按照...分组排序后,得到行编号: row_number() over(partition by ... order by ...) 按照...分组排序后,得到相应的列的第一个数据: first_va ...
- SpringBoot-@async异步执行方法
启动加上@EnableAsync ,需要执行异步方法上加入 @Async 在方法上加上@Async之后 底层使用多线程技术 演示代码: @RestController @Slf4j public c ...
- Entity Framework学习 - 5.DB First执行时提示model没有key
原因:自动生成的类中有关联主键,没有自动生成Key及Column 解决方法:在xxx.tt的66行左右修改为 var simpleProperties = typeMapper.GetSimplePr ...
- docker端口映射或启动容器时报错
原始镜像如下: REPOSITORY TAG IMAGE ID CREATED SIZE xtjatswc/mycore2 v3 73ce3cd97c01 About an hour ago .74G ...
- MySQL大表优化方案 Mysql的row_format(fixed与dynamic)
转自:https://mp.weixin.qq.com/s/VY69wWlrVLjRtKU7ULrYGw 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除 ...
- 创建genil component
1: 创建一个类继承 CL_WCF_GENIL_ABSTR_COMPONENT 2:创建 genil _ editor 创建 component, 填入该实现类. 3: genil component ...
- Request实例
Request常用方法 getRequestURL方法返回客户端发出请求时的完整URL. getRequestURI方法返回请求行中的资源名部分. getQueryString 方法返回 ...