题目描述--->p2121 拆地毯

分析

这题为什么是最大生成树.

先来bb两句

题目为拆地毯,让我们剩下k个地毯.

题目想要我们求得最大的美丽度.

且要求我们

保留的地毯构成的图中,任意可互相到达的两点间只能有一种方式互相到达

很明显,这一要求提示了我们最后结构会是一棵树

(因为树上路径唯一啊,qwq.

然后根据正难则反的思想.

我们考虑拼地毯.

所以我们就想到了kruskal算法.(`・ω・´)

与普通kruskal不同的是,这里是一个最大生成树

我们拼到k个得到的最大美丽度就是答案

为什么是拼到k个?

给大家一个图.

如果此时题目要求我们剩下6个地毯,很明显我们将6个地毯放入同一个并查集中就可满足条件.

(已经预处理出较大美丽度的情况下)

拆地毯,让我们剩下k个,因此我们合并出k个即可

所以就裸了

做法

我们只需要对最小生成树略微修改,把边权从大到小排序即可.

注意判断已经加入到同一个并查集中的数量为k.

------------------代码------------------

  1. #include<bits/stdc++.h>
  2. #define IL inline
  3. #define RI register int
  4. using namespace std;
  5. IL void in(int &x)
  6. {
  7. int f=1;x=0;char s=getchar();
  8. while(s>'9' or s<'0'){if(s=='-')f=-1;s=getchar();}
  9. while(s>='0' and s<='9'){x=x*10+s-'0';s=getchar();}
  10. x*=f;
  11. }
  12. int fa[100008],n,m,ans,cnt,k;
  13. struct E{int pre,to,w;}edge[400008];
  14. IL bool cmp(const E&a,const E&b)
  15. {
  16. return a.w>b.w;
  17. }//边权从大到小排序.
  18. IL int find(int x)
  19. {
  20. return fa[x]==x?x:fa[x]=find(fa[x]);
  21. }//路径压缩并查集
  22. IL void kruskal()
  23. {
  24. sort(edge+1,edge+m+1,cmp);//排序
  25. for(RI i=1;i<=m;i++)
  26. {
  27. RI u=edge[i].pre,v=edge[i].to,w=edge[i].w;
  28. int fu=find(u),fv=find(v);
  29. if(fu==fv) continue;
  30. ans+=w;fa[fv]=fu;
  31. cnt++;
  32. if(cnt==k) break;//判断已经拼了k个地毯.
  33. }
  34. }
  35. int main(){
  36. in(n),in(m);in(k);
  37. for(RI i=1;i<=n;i++) fa[i]=i;//并查集初始化.
  38. for(RI i=1;i<=m;i++)
  39. in(edge[i].pre),in(edge[i].to),in(edge[i].w);
  40. kruskal();//kruskal操作
  41. printf("%d",ans);
  42. }

最小生成树【p2121】 拆地毯的更多相关文章

  1. 洛谷——P2121 拆地毯

    P2121 拆地毯 题目背景 还记得 NOIP 2011 提高组 Day1 中的铺地毯吗?时光飞逝,光阴荏苒,三年过去了.组织者精心准备的颁奖典礼早已结束,留下的则是被人们踩过的地毯.请你来解决类似于 ...

  2. 洛谷 P2121 拆地毯

    P2121 拆地毯 题目背景 还记得 NOIP 2011 提高组 Day1 中的铺地毯吗?时光飞逝,光阴荏苒,三年过去了.组织者精心准备的颁奖典礼早已结束,留下的则是被人们踩过的地毯.请你来解决类似于 ...

  3. $P2121 拆地毯$

    \(problem\) \(kruskal\)的模板题. #ifdef Dubug #endif #include <bits/stdc++.h> using namespace std; ...

  4. CH模拟赛 拆地毯

    /* MST,注意只能加K条边,但是备选是M条边 */ #include<iostream> #include<cstdio> #include<string> # ...

  5. usaco 安慰奶牛

    Description 约翰有N个牧场,编号依次为1到N.每个牧场里住着一头奶牛.连接这些牧场的有P条 道路,每条道路都是双向的.第j条道路连接的是牧场Sj和Ej,通行需要Lj的时间.两牧场之 间最多 ...

  6. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

  7. 洛谷P4180 [Beijing2010组队]次小生成树Tree(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)

    洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...

  8. 【省选十连测之一】【线段树】【最小生成树之Kruskal】公路建设

    目录 题意 输入格式 输出格式 数据范围 思路 代码 题意 有n个点,m条双向道路,其中第条公路的两个端点是u[i],v[i],费用是c[i]. 现在给出q个询问,每次给定一个L和一个R,要求你只能够 ...

  9. 洛谷P4180 [BJWC2010]次小生成树(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)

    洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...

随机推荐

  1. jmeter察看结果树响应数据中文乱码解决办法

    1.到jmeter目录文件中bin文件夹下找到jmeter.properties文件,该文件为jmeter配置文件.使用编辑工具打开它. 2.找到    #sampleresult.default.e ...

  2. python-使用unittest和ddt实现数据驱动

    一.数据驱动的概念 相同测测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式成为数据驱动.测试框架使用unittest 和ddt模块相结合的方式 二.unittest ...

  3. mssql发布订阅事项

    在发布订阅过程中遇到2个需求: 1.在原有的发布快照中增加发布内容,追加模式需要在追加的表中设计一个主键,要不然没有办法进行发布的,另外还得注意将这两个字段进行更改: select immediate ...

  4. HDU 1937 F - Finding Seats 枚举

    F - Finding Seats Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  5. hdu1877进制转换

    #include <stdio.h> int m; void Ck(int n) { if(n>=m) Ck(n/m); printf("%d",n%m); } ...

  6. PHP命名空间与use

    当在一个大型项目很多程序员书写模板时,最怕出现的问题就是命名,如果一个PHP脚本出现了同名的类或者方法,就会报错(fatal error),使用命名空间可以 解决这个问题 知识点: 命名空间names ...

  7. group_load,weight_load,group_capacity, group_weight大致都是啥数值

    [ 113.180820] sgs->group_load:2039,sum_nr_running:2,sum_weighted_load:2039,sgs->group_capacity ...

  8. InfluxDB安装后web页面无法访问的解决方案

    本文属于<InfluxDB系列教程>文章系列,该系列共包括以下 16 部分: InfluxDB学习之InfluxDB的安装和简介 InfluxDB学习之InfluxDB的基本概念 Infl ...

  9. JAVA判断一个字符串里面有没有汉字

    private static boolean checkIfExistChineseCharacter(String s) { return !(s.length() == s.getBytes(). ...

  10. Python学习笔记(Django篇)——1、环境搭建篇(如何在Pycharm中配置Python和Django)

      1.准备好以下东东,并且按照先后顺序进行安装: Python 3.6 (64-bit) Django-1.11.tar.gz pycharm-community-2016.3.2.exe 安装好了 ...