洛谷 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个关系,表示哪些云朵可以连在 ...
随机推荐
- webbrowser实现一个进程一个代理的办法
public static void RefreshIESettings(string strProxy) { const int INTERNET_OPTION_PROXY = 38; const ...
- (原创)C#监控软件通信模型
直接操作现场的设备是PLC,不是服务器和客户端.所以,以PLC为核心分析设备故障以及在PC端的C#程序中加入故障处理代码. PC端读和写PLC哪个重要?写重要.因为写会影响PLC的寄存器值,进而影响工 ...
- docker-compose进阶
笔者在前文<Docker Compose 简介>和<Dcoker Compose 原理>两篇文章中分别介绍了 docker compose 的基本概念以及实现原理.本文我们将继 ...
- Java自学-异常处理 Exception
Java 异常 Exception 异常定义: 导致程序的正常流程被中断的事件,叫做异常 步骤 1 : 文件不存在异常 比如要打开d盘的LOL.exe文件,这个文件是有可能不存在的 Java中通过 n ...
- 【转载】C#通过Remove方法移除DataTable中的某一列数据
在C#中的Datatable数据变量的操作过程中,有时候我们需要移除当前DataTable变量中的某一列的数据,此时我们就需要使用到DataTable变量内部的Columns属性变量的Remove方法 ...
- 通过windowmanager在camera界面上显示内容
Window与WindowManager机制https://www.jastrelax.com/android/2018-03-08-android-window/ [Android开发艺术探索阅读笔 ...
- 给WEB DYNPRO 程序创建TCODE
1,创建WDA程序,这里就不介绍了,使用现成的程序:ZCRM_ME_SATISFACTION 2,SE93创建TCODE,输入事物代码ZLYTEST点击创建,选择带参数的事物代码. 3,填写事物WDY ...
- Kafka Streams开发入门(4)
背景 上一篇演示了filter操作算子的用法.今天展示一下如何根据不同的条件谓词(Predicate)将一个消息流实时地进行分流,划分成多个新的消息流,即所谓的流split.有的时候我们想要对消息流中 ...
- 快速了解MongoDB
简介 MongoDB是一款为广泛的现代应用程序设计的高性能.可扩展.分布式数据库系统.MongoDB可用于不同规模大小的组织,为那些对系统低延迟.高吞吐量以及可持续性有很高要求的应用提供稳定关键的服务 ...
- Prometheus学习笔记(5)Grafana可视化展示
目录 一.Grafana安装和启动 二.配置数据源 三.配置dashboard 四.配置grafana告警 一.Grafana安装和启动 Grafana支持查询Prometheus.从Grafana ...