Constructing Roads(kruskal)

简介: Constructing Roads(kruskal)

题目链接

nyist最终淘汰赛第一场 - Virtual Judge (csgrandeur.cn)


一些话

绝大多数的最小生成树题目都是因为没有好好看题导致卡题

这次卡题原因是看错题意导致输入部分的代码出问题,没有正确储存数据

要一字一句读题

想用结构体写并查集,发现不会,去查了下


流程

此题需要用并查集确认连通情况,因此用kruscal更合适

找到最小生成树的n(点数)m(边数)和边的数据(a,b,w)再套模板即可


套路

结构体并查集

struct Parent{
    int f;
}p[N];
f[x] 用 p[x].f 来代替;

ac代码

//需要解决的难点是如何把f[]写进结构体来一起排序x
//结论,f[]不能写进结构体排序,排序后会打乱并查集结构x
//看错题意得到了上面的傻逼结论,
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e3 + 10;
int f[N];
struct Dist{
    int a,b,w;
    bool operator<(const Dist& W)const{
        return w < W.w;
    }
}dist[N];
int n,m;
int find(int x){
    if(x != f[x]) f[x] = find(f[x]);
    return f[x];
}
int kruskal(){
    int res = 0;
    sort(dist,dist+n*n);
    for(int i = 0;i < n*n;i++){
        int a = dist[i].a,b = dist[i].b,w = dist[i].w;
        // cout << a << " " <<b << " " << w << endl;
        a = find(a),b = find(b);
        // cout << i << " " << a << " " << b << endl;
        if(a != b){
            res+=w;
            f[a] = b;
        }
    }
    return res;
}
int main(){
    cin >> n;
    for(int i = 0;i < n;i++){
        f[i] = i;
    }
    int cnt = 0;
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= n;j++){
            int x;
            cin >> x;
            dist[cnt++] = {i,j,x};
        }
    }
    cin >> m;
    for(int i = 0;i < m;i++){
        int a,b;
        cin >> a >> b;
        a = find(a),b = find(b);
                // cout << i << " " << a << " " << b << endl;
        if(a != b)
            f[a] = b;
    }
    int t = kruskal();
    cout << t << endl;
    return 0;
}
目录
相关文章
|
XML 存储 数据处理
python绘制热力图-数据处理-VOC数据类别标签分布及数量统计(附代码)
python绘制热力图-数据处理-VOC数据类别标签分布及数量统计(附代码)
|
7月前
|
机器学习/深度学习 人工智能 并行计算
YOLOv11改进策略【YOLO和Mamba】| MLLA:Mamba-Like Linear Attention,融合Mamba设计优势的注意力机制
YOLOv11改进策略【YOLO和Mamba】| MLLA:Mamba-Like Linear Attention,融合Mamba设计优势的注意力机制
574 9
|
11月前
|
存储 C语言 C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(一)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
221 2
|
Kubernetes 监控 Cloud Native
云原生入门:从传统应用到容器化部署的旅程
【9月更文挑战第19天】在数字化浪潮中,企业正迅速将目光投向云原生技术,以实现更快的应用开发和更灵活的资源管理。本文将通过一个简单示例引导读者理解如何将传统应用转变为云原生应用,并部署至云端。我们将探索容器化技术的基础,以及它如何帮助企业解锁现代软件交付的速度和效率。准备好让你的应用乘上云原生的快车了吗?让我们开始这段令人兴奋的旅程吧!
134 11
|
11月前
|
JSON 测试技术 API
阿里云PAI-Stable Diffusion开源代码浅析之(二)我的png info怎么有乱码
阿里云PAI-Stable Diffusion开源代码浅析之(二)我的png info怎么有乱码
|
JavaScript 前端开发 定位技术
Google Earth Engine谷歌地球引擎GEE中JavaScript脚本语言代码基础规则与函数语句
Google Earth Engine谷歌地球引擎GEE中JavaScript脚本语言代码基础规则与函数语句
316 1
|
存储 Web App开发 自然语言处理
免费可二次开发的私有网盘开源项目(筛选2024年仍活跃发版)
阿里最新开源大模型通义千问Qwen2性能大幅提升,支持128K tokens,免费开放,有望推动企业数字化转型。然而,中文互联网封闭趋势可能导致优质语料减少,影响模型效果。未来大模型发展可能依赖技术大厂和私有语料结合。文中列举了2024年活跃的开源私有网盘项目,如Syncthing、AList、Nextcloud等,为企业内部文档管理和知识库建设提供选择。
|
JavaScript 开发者
Vue 事件修饰符详解
Vue事件修饰符是Vue.js框架提供的一种功能,用于在处理DOM事件时提供更多的控制和便利性。它们可以用来改变事件的行为,例如阻止默认行为、阻止事件冒泡、只触发一次等。本文将介绍Vue事件修饰符的作用、使用方式以及使用示例,并对其在各种场景下的应用进行总结。
245 0
|
开发工具 C语言 git
【嵌入式开源库】MultiTimer 的使用,一款可无限扩展的软件定时器
【嵌入式开源库】MultiTimer 的使用,一款可无限扩展的软件定时器
407 0
|
存储 JavaScript 安全
什么是数据、元数据、主数据和参考数据?
什么是数据、元数据、主数据和参考数据?

热门文章

最新文章