zoukankan      html  css  js  c++  java
  • P2121 拆地毯

    算法

    最小生成树

    思路

    就排个序然后做 k 条边的最大生成树

    代码

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,m,k,f[100100],ans;
    struct no
    {
        int x,y,z;
    }a[100100];
    bool comp (const no & a,const no &b)
    {
        return a.z>b.z;
    }
    int find(int x)
    {
        if(f[x]!=x)
            f[x]=find(f[x]);
        return f[x];
    }
    void un(int x,int y)
    {
        f[x]=y;
    }
    int main()
    {
    
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1;i<=m;i++)
            scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
        sort(a+1,a+m+1,comp);
        for(int i=1;i<=n;i++)//并查集,初始时每个祖先都是自己
            f[i]=i;
        for(int i=1,kk=0;i<=m&&kk<k;i++)
        {
            int l=find(a[i].x),r=find(a[i].y);
            if(l!=r)//不在同一集合就合并
            {
                un(l,r);
                kk++;//计数
                ans+=a[i].z;
            }
        }
        printf("%d",ans);
        return 0;
    }
    

      

  • 相关阅读:
    数据库操作--获取空数据
    常用的css属性
    有序列表与无序列表
    表格标签table
    Div 块 盒子
    border边框 css属性
    IMG
    html中a标签与img标签
    CSS
    css 网页中如何嵌套style样式?
  • 原文地址:https://www.cnblogs.com/ruanmowen/p/12813907.html
Copyright © 2011-2022 走看看