• Luogu P1195 口袋的天空


    题目地址

    https://www.luogu.org/problemnew/show/P1195

    题目背景

    小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。

    有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。

    题目描述

    给你云朵的个数 N ,再给你 M 个关系,表示哪些云朵可以连在一起。

    现在小杉要把所有云朵连成 K 个棉花糖,一个棉花糖最少要用掉一朵云,小杉想知道他怎么连,花费的代价最小。

    输入输出格式

    输入格式:

    每组测试数据的

    第一行有三个数 $N,M,K(1 le N le 1000,1 le M le 10000,1 le K le 10)N,M,K(1≤N≤1000,1≤M≤10000,1≤K≤10)$

    接下来 MM 个数每行三个数 X,Y,LX,Y,L ,表示 XX 云和 YY 云可以通过 LL 的代价连在一起。$ (1 le X,Y le N,0 le L<10000)(1≤X,Y≤N,0≤L<10000)$

    30\%30% 的数据 $N le 100,M le 1000N≤100,M≤1000$

    输出格式:

    对每组数据输出一行,仅有一个整数,表示最小的代价。

    如果怎么连都连不出 K 个棉花糖,请输出'No Answer'。

    输入输出样例

    输入样例#1:
    3 1 2
    1 2 1
    输出样例#1:
    1

    说明

    厦门一中YMS原创


    思路

    根据题目所说,我们将一个棉花糖看做一棵树,那么一共要生成K棵树

    我们知道一棵有N个节点的树一共有N-1条边,那么对于N个节点,要有K棵树的话就要先生成一棵有N-K条边的树

    其余的K-1个节点,每个节点作为一棵树

    这就完成了K棵树

    要使得代价最小,那么就要用最小生成树算法

    代码

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    const int maxn = 1003;
    
    using namespace std;
    
    int n, m, k, f[maxn], tot, Ans;
    
    struct edge{
        int u, v, w;
    }ed[10003];
    
    int find(int x) {
        if(f[x] == x) return x;
        else return f[x] = find(f[x]);
    }
    
    bool cmp(edge a, edge b) {
        return a.w < b.w;
    }
    
    int main() {
        scanf("%d%d%d", &n, &m, &k);
        for(int i=1; i<=n; i++) f[i] = i;
        for(int i=1; i<=m; i++) {
            scanf("%d%d%d", &ed[i].u, &ed[i].v, &ed[i].w);
        }
        sort(ed+1, ed+1+m, cmp);
        for(int i=1; i<=m; i++) {
            int xx = find(ed[i].u), yy = find(ed[i].v);
            if(xx != yy) {
                f[xx] = find(yy);
                tot++;
                Ans += ed[i].w;
            }
            if(tot == n-k) break;
        }
        if(tot < n-k) {
            printf("No Answer
    ");
            return 0;
        }
        printf("%d", Ans);
    }
  • 相关阅读:
    网络连接的基本概念,中继系统(网络)
    qnorm 函数 , with 函数(R)
    关于 paste 函数 (R)
    对数据的探索,数据框中是否有大于某个数的值,返回大于的具体的数值,或者数值的坐标(R)
    查看内存占用情况,查看进程,终止进程(cmd)
    查询校园网外网的ip
    二进制的减法(汇编)(数字电路)
    画出箱线图(R)
    排比句(文章写作)
    react中的TS理解
  • 原文地址:https://www.cnblogs.com/bljfy/p/9260727.html
Copyright © 2020-2023  润新知