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;
}
相关推荐
拓恒技术3 小时前
无人机巡检AI算法的工程化落地:从需求到交付的5个核心环节
人工智能·算法·无人机
晨曦中的暮雨3 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
怕浪猫4 小时前
Claude Code vs Codex:Computer Use 实现原理深度拆解
算法·面试·github
罗西的思考5 小时前
AI 时代的 “房谋杜断”:如何培养能力、品味与判断力
人工智能·算法·机器学习
淡海水5 小时前
07-02-源码-.NET Core GC分配路径
算法·unity·c#·.netcore·gc·1024程序员节
choumin6 小时前
C++中万能引用与std::forward的作用和用法
c++·万能引用·std forward
下一站春风里7 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
DRobot8 小时前
【机械制图与CAD实战(二十五)】螺纹的表示方法
算法·机械制图
用户老李8 小时前
卡尔曼滤波自学教程 10:无迹卡尔曼滤波(UKF)
算法
深圳市益普科技有限公司9 小时前
半导体良率管理YMS:良率与设备参数的相关性,先拉哪几组数据
人工智能·python·算法