Problem: lab-week10-exercise02 Building a Fiber Network

Problem


Analysis

这道题看起来是最小生成树或者最短路之类的,但因为只用输出边权和,所以直接对边权排序用并查集即可,以及在用并查集的时候可以进行路径压缩降低时间复杂度。

Code

C++

cpp 复制代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m;
int fa[100005];
int f;
bool b=1;
long long ans;

struct edge{
    int u,v,w;
}a[100005];

bool cmp(edge x,edge y){
    return x.w<y.w;
}

int find_fa(int x){
    if(fa[x]==x){
        return x;
    }
    fa[x]=find_fa(fa[x]);
    return fa[x];
}

int main(){
    cin>>n>>m;
    for(int i=1;i<=m;++i){
        cin>>a[i].u>>a[i].v>>a[i].w;
    }
    for(int i=1;i<=n;++i){
        fa[i]=i;
    }
    if(n==1){
        cout<<0<<endl;
        return 0;
    }
    if(m<n-1){
        cout<<"IMPOSSIBLE\n";
        return 0;
    }
    sort(a+1,a+m+1,cmp);
    for(int i=1;i<=m;++i){
        if(find_fa(a[i].u)!=find_fa(a[i].v)){
            ans+=1ll*a[i].w;
            fa[fa[a[i].u]]=fa[a[i].v];
        }
    }
    f=find_fa(1);
    for(int i=2;i<=n;++i){
        if(find_fa(i)!=f){
            b=0;
            break;
        }
    }
    if(b){
        cout<<ans<<endl;
    }
    else{
        cout<<"IMPOSSIBLE\n";
    }
    return 0;
}
相关推荐
yong999012 小时前
基于压缩感知与后向投影算法的合成孔径雷达成像实现
算法
Q741_14713 小时前
Linux UDP 服务端 实战思路 C++ 套接字 源码包含客户端与服务端 游戏服务端开发基础
linux·服务器·c++·游戏·udp
蒙奇D索大13 小时前
【数据结构】排序算法精讲 | 插入排序全解:稳定性、复杂度与实战代码剖析
数据结构·算法·排序算法
刘永鑫Adam13 小时前
Nature Methods | 诸奇赟组-Scikit-bio:用于生物组学数据分析的基础Python库
人工智能·python·算法·机器学习·数据分析
hweiyu0013 小时前
查找算法:分类及特点
算法·分类
游戏23人生13 小时前
c++ 语言教程——17面向对象设计模式(六)
开发语言·c++·设计模式
superman超哥13 小时前
仓颉内存管理内功:栈与堆的分配策略深度解析
c语言·开发语言·c++·python·仓颉
youngee1113 小时前
hot100-51搜索二维矩阵
数据结构·算法·矩阵
byzh_rc13 小时前
[模式识别-从入门到入土] 支持向量积SVM
数据库·人工智能·算法
im_AMBER13 小时前
Leetcode 86 【二分查找】在排序数组中查找元素的第一个和最后一个位置
笔记·学习·算法·leetcode