当前位置: 首页 > news >正文

苗条的生成树 Slim Span--洛谷

传送门

 

钢哥终于没给黑题紫题了(卑微v

稍稍需要多想一点点

--------------------------------------------------------------------------------------------------------

题意简述

求所有生成树中最大边权与最小边权差最小的,输出它们的差值。

输入:

输入文件包含多组测试数据,每组测试数据如下: 第1行:2个整数n m (2 ≤ n ≤ 100 and 0 ≤ m ≤ n(n − 1)/2),n表示顶点数,m表示边数。接下来m行,每行3个空格分开的整数a b w(1 ≤ w ≤ 10000) , 表示顶点a与顶点b之间有一条边,权值为w。

输出:

对每组测试数据,如果图存在生成树,输出生成树的差值最小的;否则,输出-1。

--------------------------------------------------------------------------------------------------------

由于n的值比较小

所以可以不用那种优化到极致的神仙算法/思路(可以小小的偷偷懒

把所有边按边权排序

从每个边求最小生成树

用最小生成树中的最大边权和最小边权的差来更新最终的ans

O(q*mlogm)

--------------------------------------------------------------------------------------------------------

最后有两个0 0方便退出询问

但是...也算是个小坑吧

--------------------------------------------------------------------------------------------------------

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;

inline int read()
{
    int sum = 0,p = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9')
    {
        if(ch == '-')
            p = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
        (sum *= 10) += ch - '0';
        ch = getchar();
    }
    return sum * p;
}

const int INF = 99999;
int n,m,ans,maxns;
struct edge
{
    int frm,to,wei;
}e[5005];
int fa[105];

bool cmp(edge a,edge b)
{
    return a.wei < b.wei;
}

int findfa(int o)
{
    if(fa[o] == o)
        return o;
    else
        return fa[o] = findfa(fa[o]);
}

int kruskal(int o)
{
    int k = 0;
    maxns = -1;
    for(int i = 1;i <= n;i++)
        fa[i] = i;
    int minn = e[o].wei,maxn = 0;
    for(int i = o;i <= m;i++)
    {
        int a = findfa(e[i].frm);
        int b = findfa(e[i].to);
        if(a == b)
            continue;
        ++k;
        fa[a] = b;
        maxns = max(maxns,e[i].wei);
        if(k == n - 1)
            return 1;
    }
    return 0;
}

int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        if(n == 0 && m == 0)
            return 0;
        ans = INF;
        memset(e,0,sizeof(e));
        memset(fa,0,sizeof(fa));
        for(int i = 1;i <= m;i++)
        {
            e[i].frm = read();
            e[i].to = read();
            e[i].wei = read();
        }
        sort(e+1,e+m+1,cmp);
        for(int i = 1;i <= m;i++)
        {
            if(kruskal(i))
                ans = min(ans,maxns - e[i].wei);
        }
        if(ans == INF)
            ans = -1;
        printf("%d\n",ans);
    }
    return 0;
} 

 

转载于:https://www.cnblogs.com/darlingroot/p/10939929.html

相关文章:

  • 关于ADB 执行报错问题-db server version (31) doesn't match this client (40); killing...
  • 如何查看srp中的shader文件
  • 项目Beta冲刺(6/7)(追光的人)(2019.5.28)
  • Constant Buffers
  • P4013 数字梯形问题 最小费用最大流
  • 分析GlobalIllumination函数的实现
  • UVa 10474 Where is the Marble?
  • 光照贴图的中的编码格式
  • macOS U盘制作启动系统
  • 再谈gamma校正——重要知识点
  • 微信小程序小结
  • RenderDoc截取unity帧,分析shader
  • pc和android平台下lightmap的质量选取导致的宏变化
  • mac 笔记本编辑文本命令
  • SHADOWS_SCREEN宏打开的时机
  • Git初体验
  • js继承的实现方法
  • JS题目及答案整理
  • Less 日常用法
  • Linux各目录及每个目录的详细介绍
  • Linux中的硬链接与软链接
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • nfs客户端进程变D,延伸linux的lock
  • Python十分钟制作属于你自己的个性logo
  • Python语法速览与机器学习开发环境搭建
  • Web设计流程优化:网页效果图设计新思路
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 阿里云前端周刊 - 第 26 期
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 原生Ajax
  • Hibernate主键生成策略及选择
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • ()、[]、{}、(())、[[]]命令替换
  • (1)虚拟机的安装与使用,linux系统安装
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (七)Knockout 创建自定义绑定
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (转)Oracle存储过程编写经验和优化措施
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET 8.0 发布到 IIS
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET gRPC 和RESTful简单对比
  • .NET Micro Framework初体验
  • .Net MVC4 上传大文件,并保存表单
  • .Net Remoting(分离服务程序实现) - Part.3
  • :O)修改linux硬件时间
  • @FeignClient注解,fallback和fallbackFactory