zoukankan      html  css  js  c++  java
  • P1195 口袋的天空【贪心+kruskal】

    题目

    https://www.luogu.com.cn/problem/P1195

     分析

    本题运用了一个贪心的思想,连接一条边就相当于连通块减1,运用kruskal算法的思想:每次连可以连的边中代价最小的 (贪心) 使用 并查集维护

    代码

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    #define maxn 10010
    #define maxm 10010
    struct node
    {
        int from;
        int to;
        int dis;
    }e[maxm * 2];
    int edges[maxn][maxn];
    int n, m, k;
    int father[maxn];
    bool cmp(struct node &a, struct node &b)
    {
        return a.dis < b.dis;
    }
    int find(int x)
    {
        if (father[x] == x)return x;
        return father[x] = find(father[x]);
    }
    int allcount = 0;
    int counts = 0;
    void kruskal()
    {
            sort(e+1, e + m+1, cmp);
        for (int i = 1; i <=m; i++)
        {
            int tempx = find(e[i].from);
            int tempy = find(e[i].to);
            if (tempx == tempy)continue;
            counts++;
            father[tempx] = tempy;
            allcount += e[i].dis;
            if (counts== n - k) { printf("%d", allcount); return; }
        }
        printf("No Answer
    ");
        return;
    }
    
    int main()
    {
        scanf("%d%d%d", &n, &m, &k);
        for (int i = 1; i <=m; i++)
        {
            scanf("%d%d%d", &e[i].from, &e[i].to, &e[i].dis);
        }
        for (int i = 0; i <= n; i++)father[i] = i;
        kruskal();
    
    }
  • 相关阅读:
    激活Win Server 2008 R2 Datacenter
    .NET中使用EF6与连接MYSQL
    设计模式(六)——命令模式
    C#爬虫之Senlium
    GitHub入门(一)GIT配置与Hexo博客搭建
    正则表达式
    C#预处理器
    第一次炒花甲
    第一次清蒸鲈鱼
    Python traceback【转】
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/13197876.html
Copyright © 2011-2022 走看看