最小生成树的唯一性

here

a了捏

#include<iostream>
#include<algorithm>
#include<set>

using namespace std;

const int N = 200010;

int n,m;
int p[N];
int f = 0;

//并查集
int find(int x){
    if(p[x] != x) p[x] = find(p[x]);
    return p[x];
}

//结构体存边
struct Edge{
    int a,b,w;

    bool operator < (const Edge &x) const{
        return w < x.w;
    }
} es[N];

int main(){
    cin >> n >> m;

    for(int i = 0;i < m;i ++){
        int a,b,c;
        cin >> a >> b >> c;

        es[i] = {a,b,c};
    }

    int cnt = 0,res = 0;

    for(int i = 1;i <= n;i ++) p[i] = i;

    sort(es,es + m);

    for(int i = 0;i < m;i ++){
        int a = es[i].a,b = es[i].b,w = es[i].w;

        a = find(a),b = find(b);

        if(a != b){
            for(int j = i + 1;j < m && w == es[j].w;j ++){
                int pa = find(es[j].a),pb = find(es[j].b);
                if((pa == a && pb == b) || (pa == b && pb == a)) f = 1;
            }
            p[a] = b;
            res += w;
            cnt ++;
        }

        if(cnt == n - 1) break;
    }   

    set<int> alls;
    for(int i = 1;i <= n;i ++) alls.insert(find(i));

    if(alls.size() == 1){
        cout << res << endl;
        if(f) cout << "No";
        else cout << "Yes";
    }else{
        cout << "No MST" << endl;
        cout << alls.size();
    }
}
posted @   Xuuxxi  阅读(91)  评论(1编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示