洛谷 P1195 【口袋的天空】
P1195
大体题意:
就是给你\(n\)个点\(m\)条边, 然后让你把这几个点连成\(k\)个部分.
解题思路:
很容易就可以想到生成树(别问我怎么想到的).
因为最小生成树中有一个判断
for (int i = 1; i <= m; ++i) {
if (father(ka[i].x) != father(ka[i].y)){
unionn(ka[i].x, ka[i].y);
tot += ka[i].v;
s++;
}
if (s == n - 1) break;//我在这里,如果这张图中已经加入了n-1条边,
}//那就说明图已经可以联通了,然后如果去掉m条边的话,那就是把图分成了m个部分
//那么我们可以利用这一点来用kruskal做这道题聊.
修改后的代码长这样:
for (int i = 1; i <= m; ++i) {
if (father(ka[i].x) != father(ka[i].y)){
unionn(ka[i].x, ka[i].y);
tot += ka[i].v;
s++;
}
if (s == n - k) break;//k为分成多少个部分,自己想一下也很好想.
//n-1条边可以把图刚刚好联通,n-k条边可以将图分成k个部分.
}
code:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iomanip>
using namespace std;
int n, m, k, s, cnt, tot;
struct node {
int x, y, v;
}ka[200001];
int fat[5001];
int read() {
int s = 0, f = 0; char ch = getchar();
while (!isdigit(ch)) f |= (ch == '-'), ch = getchar();
while (isdigit(ch)) s = s * 10 + (ch ^ 48), ch = getchar();
return f ? -s : s;
}
int father(int x) {
if (fat[x] != x) fat[x] = father(fat[x]);//并查集用
return fat[x];
}
void unionn(int x, int y) {//并查集用
int fa = father(x);
int fb = father(y);
if (fa != fb) fat[fa] = fb;
}
bool cmp(node a, node b) {//sort用
return a.v < b.v;
}
int main() {
n = read(), m = read(), k = read();
int x, y, d;
for (int i = 1; i <= m; i++) {
x = read(), y = read(), d = read();
ka[++cnt].v = d;
ka[cnt].x = x;
ka[cnt].y = y;
}
for (int i = 1; i <= n; i++) fat[i] = i;//并查集用
sort(ka + 1, ka + m + 1, cmp);
for (int i = 1; i <= m; ++i) {//kruskal
if (father(ka[i].x) != father(ka[i].y)){
unionn(ka[i].x, ka[i].y);
tot += ka[i].v;
s++;
}
if (s == n - k) break;
}
printf("%d\n", tot);
}
洛谷 P1195 【口袋的天空】的更多相关文章
- 洛谷P1195 口袋的天空
口袋的天空 327通过 749提交 题目提供者该用户不存在 标签云端 难度普及+/提高 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 暂时没有讨论 题目背景 小杉坐在教室里,透 ...
- 洛谷 P1195 口袋的天空
题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 题目描述 给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在 ...
- 洛谷 P1195 口袋的天空(最小生成树)
嗯... 题目链接:https://www.luogu.org/problemnew/show/P1195 思路: 首先可以判断这道题是用最小生成树来做的,然后在将其合并时用ans记录一下它的总消耗, ...
- 洛谷P1195口袋的天空
传送门啦 一个裸的最小生成树,输出 $ No Answer $ 的情况只有 $ k < n $ 的时候. 开始令 $ num =n $ ,如果 $ num = k $ ,直接输出 $ 0 $ , ...
- P1195 口袋的天空
P1195 口袋的天空 题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 题目描述 给你云朵的个数N,再给你M个关 ...
- 【洛谷】【最小生成树】P1195 口袋的天空
[题目背景:] 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. [题目描述:] 给你云朵的个数N,再给你M个关系,表示哪些 ...
- P1195 口袋的天空 洛谷
https://www.luogu.org/problem/show?pid=1195 题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美 ...
- 【luogu P1195 口袋的天空】 题解
题目链接:https://www.luogu.org/problemnew/show/P1195 嗯~我是被题目背景吸引到才做的,想吃棉花糖啦! 话说回来,这道题其实很容易就能想明白,k棵最小生成树. ...
- luogu P1195 口袋的天空
题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖. 题目描述 给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在 ...
随机推荐
- php 获取当前IP地址
function getIP() { return isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_X_FO ...
- 动软软件 生成 实体类模板(EnterpriseFrameWork框架)
1.废话不多说,直接上效果图 . 2 .动软模板代码 <#@ template language="c#" HostSpecific="True" #&g ...
- C# vb .NET读取识别条形码线性条码code39
code39是比较常见的条形码编码规则类型的一种.如何在C#,vb等.NET平台语言里实现快速准确读取该类型条形码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效.准确 ...
- java 枚举示例
public enum YNEnum { N(0,"否"), Y(1,"是"); private int code; private String name; ...
- [MySql] - Windows MySql 8.x 手动zip包安装与外网访问登录权限设定
MySql 8.x官方下载地址 https://dev.mysql.com/downloads/mysql/8.0.html https://cdn.mysql.com//Downloads/MySQ ...
- ThreadLocal定义、使用案例及源码分析
原文连接:(http://www.studyshare.cn/blog/details/1165/0 ) 一.ThreadLocal定义 jdk官方文档定义是:该类提供线程局部变量. 这些变量与其正常 ...
- Mybatis映射器接口代理对象的方式 运行过程
查询一张表的所有数据. 环境: 使用工具IntelliJ IDEA 2018.2版本. 创建Maven工程不用骨架 1.pom.xml <?xml version="1.0" ...
- web基础运用
目录 web框架 web应用本质 Web应用程序的优点 Web应用程序的缺点 BS架构优点 web框架的分类 web框架包含了三部分 web框架分类 Http协议 路由系统 自定制的web框架案例 w ...
- java.net.URLEncoder对中文的编码和解码
// java.net.URLEncoder对中文的编码和解码String str = URLEncoder.encode("测试字符串", "utf-8"); ...
- 分布式事务:Saga模式
1 Saga相关概念 1987年普林斯顿大学的Hector Garcia-Molina和Kenneth Salem发表了一篇Paper Sagas,讲述的是如何处理long lived transac ...