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数据类别标签分布及数量统计(附代码)
|
数据采集 自然语言处理 搜索推荐
图文详解 DFS 和 BFS | 算法必看系列知识二十四
深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等,也频繁出现在高频面试题中。
37123 6
图文详解 DFS 和 BFS | 算法必看系列知识二十四
|
缓存 安全 PHP
攻防世界06-get_post
攻防世界06-get_post
|
存储 C语言 C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(一)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
315 3
|
机器学习/深度学习 人工智能 并行计算
YOLOv11改进策略【YOLO和Mamba】| MLLA:Mamba-Like Linear Attention,融合Mamba设计优势的注意力机制
YOLOv11改进策略【YOLO和Mamba】| MLLA:Mamba-Like Linear Attention,融合Mamba设计优势的注意力机制
825 9
|
网络协议 网络架构
【计网·湖科大·思科】实验五 IPV4地址-分类地址和构建超网
【计网·湖科大·思科】实验五 IPV4地址-分类地址和构建超网
575 2
|
存储 算法
动态规划算法学习一:DP的重要知识点、矩阵连乘算法
这篇文章是关于动态规划算法中矩阵连乘问题的详解,包括问题描述、最优子结构、重叠子问题、递归方法、备忘录方法和动态规划算法设计的步骤。
1392 0
|
JSON 测试技术 API
阿里云PAI-Stable Diffusion开源代码浅析之(二)我的png info怎么有乱码
阿里云PAI-Stable Diffusion开源代码浅析之(二)我的png info怎么有乱码
|
JavaScript 前端开发 定位技术
Google Earth Engine谷歌地球引擎GEE中JavaScript脚本语言代码基础规则与函数语句
Google Earth Engine谷歌地球引擎GEE中JavaScript脚本语言代码基础规则与函数语句
479 1
|
存储 缓存 网络协议
计算机网络:思科实验【2-MAC地址、IP地址、ARP协议及总线型以太网的特性】
计算机网络:思科实验【2-MAC地址、IP地址、ARP协议及总线型以太网的特性】

热门文章

最新文章