• 洛谷1195orz



    题目背景

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

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

    题目描述

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

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

    输入输出格式

    输入格式:

    每组测试数据的

    第一行有三个数N,M,K(1<=N<=1000,1<=M<=10000,1<=K<=10)

    接下来M个数每行三个数X,Y,L,表示X云和Y云可以通过L的代价连在一起。(1<=X,Y<=N,0<=L<10000)

    30%的数据N<=100,M<=1000

    输出格式:

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

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

    输入输出样例

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




    果然是并查集orz

    //参考了一下题解红名dalao的思路

    //也学习了一下operator的用法w

    先放代码~(蒟蒻的代码可以说是很易懂了)

    #include<bits/stdc++.h>//1195
    using namespace std;
    int N,M,K,ans,now,o,p;
    int fat[100010];//祖宗 
    struct node{
    	int q;//起点 
    	int w;//重点 
    	int e;//代价 
    }qwq[100010];
    bool operator<(node a,node b){
    	return a.e<b.e;
    }
    int findf(int x){
    	return fat[x]==x?fat[x]:fat[x]=findf(fat[x]);
    }//路径压缩 
    int main()
    {
    	cin>>N>>M>>K;
    	for(int i=1;i<=N;i++){
    	fat[i]=i;
    	}
    
    	for(int i=1;i<=M;i++){
    		cin>>qwq[i].q>>qwq[i].w>>qwq[i].e;
    	}
    	sort(qwq+1,qwq+M+1);//价值排序,从最小的开始连 
    	for(int i=1;i<=M;i++){
    		o=findf(qwq[i].q); 
    		p=findf(qwq[i].w);//分别找父亲 
    		if(o!=p){//连过就跳过了 
    		fat[o]=p;//合并 
    		now++;//记录边的数量 
    		ans+=qwq[i].e;}//通通连起来! 
    		//一棵有n个节点的树有n-1条边 
    		if(now==N-K){//k棵树,n个节点,就有n-k条边 
    			cout<<ans<<endl;
    			return 0;
    		}
    	}
    	cout<<"No Answer"<<endl;
    	return 0;
    }
    

    开心地结束了~

    用了半个多小时……第一遍提交还re了

    教训是:一维数组不要怕开大233333333


    哦对了,还有一点

    重置运算符的函数写在里面struct的话必须加const

    bool operator <(node a) const;

    在外面就像我这样写就ok

    qwqwqwq
  • 相关阅读:
    选择排序
    【洛谷8341】[AHOI2022] 回忆(贪心)
    swagger在高版本springboot中的使用
    springboot中关于连接池的几种方式
    MySQL 的 delete、truncate、drop 有什么区别?
    Docker容器命令
    IDEA 神级插件!效率提升 20 倍!
    Bean Searcher——多条件查询神器
    8 种最坑SQL语法,工作中踩过吗?
    消息中间件:rocketmq单机安装部署
  • 原文地址:https://www.cnblogs.com/erutsiom/p/9905166.html
Copyright © 2020-2023  润新知