最小生成树【p2121】 拆地毯
题目描述--->p2121 拆地毯
分析
这题为什么是最大生成树.
先来bb两句
题目为拆地毯,让我们剩下k个地毯.
题目想要我们求得最大的美丽度.
且要求我们
保留的地毯构成的图中,任意可互相到达的两点间只能有一种方式互相到达
很明显,这一要求提示了我们最后结构会是一棵树
(因为树上路径唯一啊,qwq.
然后根据正难则反的思想.
我们考虑拼地毯.
所以我们就想到了kruskal算法.(`・ω・´)
与普通kruskal不同的是,这里是一个最大生成树
我们拼到k个得到的最大美丽度就是答案
为什么是拼到k个?
给大家一个图.

如果此时题目要求我们剩下6个地毯,很明显我们将6个地毯放入同一个并查集中就可满足条件.
(已经预处理出较大美丽度的情况下)
拆地毯,让我们剩下k个,因此我们合并出k个即可
所以就裸了
做法
我们只需要对最小生成树略微修改,把边权从大到小排序即可.
注意判断已经加入到同一个并查集中的数量为k.
------------------代码------------------
#include<bits/stdc++.h>
#define IL inline
#define RI register int
using namespace std;
IL void in(int &x)
{
int f=1;x=0;char s=getchar();
while(s>'9' or s<'0'){if(s=='-')f=-1;s=getchar();}
while(s>='0' and s<='9'){x=x*10+s-'0';s=getchar();}
x*=f;
}
int fa[100008],n,m,ans,cnt,k;
struct E{int pre,to,w;}edge[400008];
IL bool cmp(const E&a,const E&b)
{
return a.w>b.w;
}//边权从大到小排序.
IL int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
}//路径压缩并查集
IL void kruskal()
{
sort(edge+1,edge+m+1,cmp);//排序
for(RI i=1;i<=m;i++)
{
RI u=edge[i].pre,v=edge[i].to,w=edge[i].w;
int fu=find(u),fv=find(v);
if(fu==fv) continue;
ans+=w;fa[fv]=fu;
cnt++;
if(cnt==k) break;//判断已经拼了k个地毯.
}
}
int main(){
in(n),in(m);in(k);
for(RI i=1;i<=n;i++) fa[i]=i;//并查集初始化.
for(RI i=1;i<=m;i++)
in(edge[i].pre),in(edge[i].to),in(edge[i].w);
kruskal();//kruskal操作
printf("%d",ans);
}
最小生成树【p2121】 拆地毯的更多相关文章
- 洛谷——P2121 拆地毯
P2121 拆地毯 题目背景 还记得 NOIP 2011 提高组 Day1 中的铺地毯吗?时光飞逝,光阴荏苒,三年过去了.组织者精心准备的颁奖典礼早已结束,留下的则是被人们踩过的地毯.请你来解决类似于 ...
- 洛谷 P2121 拆地毯
P2121 拆地毯 题目背景 还记得 NOIP 2011 提高组 Day1 中的铺地毯吗?时光飞逝,光阴荏苒,三年过去了.组织者精心准备的颁奖典礼早已结束,留下的则是被人们踩过的地毯.请你来解决类似于 ...
- $P2121 拆地毯$
\(problem\) \(kruskal\)的模板题. #ifdef Dubug #endif #include <bits/stdc++.h> using namespace std; ...
- CH模拟赛 拆地毯
/* MST,注意只能加K条边,但是备选是M条边 */ #include<iostream> #include<cstdio> #include<string> # ...
- usaco 安慰奶牛
Description 约翰有N个牧场,编号依次为1到N.每个牧场里住着一头奶牛.连接这些牧场的有P条 道路,每条道路都是双向的.第j条道路连接的是牧场Sj和Ej,通行需要Lj的时间.两牧场之 间最多 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
- 洛谷P4180 [Beijing2010组队]次小生成树Tree(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)
洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...
- 【省选十连测之一】【线段树】【最小生成树之Kruskal】公路建设
目录 题意 输入格式 输出格式 数据范围 思路 代码 题意 有n个点,m条双向道路,其中第条公路的两个端点是u[i],v[i],费用是c[i]. 现在给出q个询问,每次给定一个L和一个R,要求你只能够 ...
- 洛谷P4180 [BJWC2010]次小生成树(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)
洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...
随机推荐
- USACO Section1.3 Prime Cryptarithm 解题报告
crypt1解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- python学习笔记一:数据类型
一.Python文件类型 1.源代码 hello.py: 1 #!/usr/bin/python 2 print "hello world" 2.字节代码:python源文件经编译 ...
- webstrom11 vue插件配置
直接上图 1. 安装vue插件 2.添加模板 3.指定模板类型 最新的是插件 是 vue.js 创建完 Vue File 文件后 需要在 下面这里关联一下
- postman与charles的结合使用
1.准备charles环境 Charles端口一般配置的为8888,不知道怎么配置详见charles文档 打开charles,发现访问浏览器任意页面都是失败. 在浏览器的高级设置中设置代理服务器,以火 ...
- 解决display:inline-block;行内块元素出现空白空隙问题
给他的父元素加:font-size:0px;, ul { font-size:0px;} li { font-size:16px;}
- Python全栈工程师(面向对象)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 开局一张图 Python人工智能从入门到精通 day16补充: 异常处理 文件 ...
- 聊聊、Mybatis XML
引入相应的依赖包 <dependency><groupId>org.mybatis</groupId><artifactId>mybatis-sprin ...
- jquery validate 使用示范
最近应公司要求做了一个jquery的示例文件,包括:模态窗口怎么实现:jquery validate下的校验:怎么做图片特效:怎么实现异步操作:实现图片上传剪切效果等很多特效: 这里把jquery校验 ...
- JavaScript里面的面向对象
1.JavaScript里面没有类,但是利用函数可以起到类似的作用,例如简单的构造方法,跟Python差别不大 function f1(mame,age){ this.Name = name; thi ...
- Spark on Yarn——spark1.5.1集群配置
写在前面: spark只是一种计算框架,如果要搭建集群要依托与一定的组织模式. 目前来说,Spark集群的组织形式有三种: 1. Standalone:使用akka作为网络IO组件,mast ...