首页 > TAG信息列表 > P1195
【题解】Luogu P1195 口袋的天空
口袋的天空 题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。 题目描述 给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在一起。 现在小杉要把所有云朵连成K个棉花糖,一个棉花糖最少要用掉一朵P1195 口袋的天空【贪心+kruskal】
题目 https://www.luogu.com.cn/problem/P1195 分析 本题运用了一个贪心的思想,连接一条边就相当于连通块减1,运用kruskal算法的思想:每次连可以连的边中代价最小的 (贪心) 使用 并查集维护 代码 #include<iostream> #include<cstdio> #include<string> #include<cstring> #inclP1195 口袋的天空 (生成树)
题目链接 解法: 初始n个节点,n颗树,每连一条边,减少一棵树。k棵树需要连n-k条边。。。1棵树需要连n-1条边。。。 给每条可以连的边按代价从小到大排个序,然后连n-k条边造k个最小生成树就可以了。 Code: 1 #include <bits/stdc++.h> 2 # define LL long long 3 using name洛谷 P1195 口袋的天空
题目传送门 解题思路: 本题直接跑一遍Kruskal,当成功加入n-k条边时即为目标状态。 AC代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 5 using namespace std; 6 7 int n,m,k,fa[1001],sum,ans; 8 struct kkk { 9 int qd,zd,v;10 }e[10001];11 12 boo洛谷 P1195 口袋的天空(最小生成树)
嗯... 题目链接:https://www.luogu.org/problemnew/show/P1195 思路: 首先可以判断这道题是用最小生成树来做的,然后在将其合并时用ans记录一下它的总消耗,然后用一个sum记录一下一共将几块云朵合并在了一起.... 每合并完一次,都要进行判断(k是否等于n-sum,即是否已经合并成了k块棉洛谷(LG)P1195口袋的天空
就是一道裸题,求的就是有几块生成树,算并查集的时候加一个判断就好了(每合并一次tot++,直到tot==n-k为止,然后输出就好了) https://www.luogu.org/problemnew/show/P1195 #include <algorithm>#include <iostream>#include <cstdio>#include <cmath>using namespace std;int n,m,k,f[1