luogu题目传送门!

懒得找最小生成树模板了,就把这题当板子吧。

最小生成树,就是指对于一张图,我们将图转换成一棵树,连通的,同时让所有的边尽可能的小(废话)。


最小生成树一般都采用Kruskal算法,期间需要用到并查集。大体思路如下:

先将所有边从小到大排序,对所有的节点维护并查集 f。

然后依次遍历所有的边,(当然是先从小的开始)。可以将并查集的 f 理解为缩点的类似操作。如果一条边的两个点

在同一个 f 中,则证明这两个点已经连通,不需要这条边(当然是前面通过别的小边已经连通了)。

因此,在从小到大遍历边的时候,如果两个点不在一个集合,就连这条边(因为他小)。

在同一个集合中,就不用画蛇添足了。

再看这道(没人权的)题,如果把每个物品当作点,那么价格就是边权。如果有优惠,我们当然选择买优惠的。(虽然这道题数据毒瘤,居然还有

优惠比原价高的情况,必须特判)

没有优惠,就连原价。反正最后都会经过最小生成树的筛选。

上板子代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define N 1000100
  4. #define isdigit(c) ((c)>='0'&&(c)<='9')
  5. #define orz 0
  6.  
  7. inline int read(){
  8. int x = , s = ;
  9. char c = getchar();
  10. while(!isdigit(c)){
  11. if(c == '-') s = -;
  12. c = getchar();
  13. }
  14. while(isdigit(c)){
  15. x = (x << ) + (x << ) + (c ^ '');
  16. c = getchar();
  17. }
  18. return x * s;
  19. }
  20.  
  21. struct node{
  22. int u, v, w;
  23. } t[N];
  24. int bian = ;
  25. int fa[N];
  26. int ans = ;
  27.  
  28. int find(int x){
  29. return x == fa[x] ? x : fa[x] = find(fa[x]);
  30. }
  31.  
  32. bool cmp (node a, node b){
  33. return a.w < b.w;
  34. }
  35.  
  36. void kruskal(int pri, int n){
  37. for(int i = ;i <= n; i++) fa[i] = i;
  38. sort(t + , t + bian + , cmp);
  39. for(int i = ;i <= bian; i++){
  40. int u = t[i].u, v = t[i].v, w = t[i].w;
  41. int fau = find(u), fav = find(v);
  42. if(fau != fav){
  43. fa[fau] = fav;
  44. ans += (w < pri ? w : pri); /*毒瘤数据可能出现 w > pri 的情况,这种时候肯定选择 pri*/
  45. }
  46. }
  47. return ;
  48. }
  49.  
  50. int main(){
  51. // freopen("hh.txt", "r", stdin);
  52. int pri = read(), n = read();
  53. for(int i = ;i <= n; i++){
  54. for(int j = ;j <= n; j++){
  55. int x = read();
  56. if(x != ){ /*注意给边去重!!*/
  57. t[++bian].u = i;
  58. t[bian].v = j;
  59. t[bian].w = x;
  60. }
  61. }
  62. }
  63. kruskal(pri, n);
  64. for(int i = ;i <= n; i++)
  65. if(fa[i] == i)ans += pri; /*可能出现有的物品没有优惠或者是图中的第一个*/
  66. printf("%d\n", ans);
  67. return orz; /*向dalao低头*/
  68. }

(板子) 最小生成树 买礼物 luogu P1194的更多相关文章

  1. 洛谷 P1194 买礼物 题解

    P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买\(B\)样东西,巧的是,这\(B\)样东西价格都是\(A\)元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第II样东西 ...

  2. 洛谷——P1194 买礼物

    P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只 ...

  3. P1194 买礼物(建模)

    P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只 ...

  4. 洛谷 P1194 买礼物

    洛谷 P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第II样东西,再买第J样,那么 ...

  5. 2017广东工业大学程序设计竞赛决赛-tmk买礼物

    tmk买礼物 Description 今天是校赛的日子,为了庆祝这么喜庆的日子,TMK打算买些礼物给女票LSH庆祝一下. TMK进入了雪梨超市,然后刚踏入的一瞬间,店主就对TMK说:“恭喜你成为了本店 ...

  6. luogu P1194 买礼物

    题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只花K[I,J]元,更 ...

  7. P1194 买礼物

    题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只花K[I,J]元,更 ...

  8. P1194 买礼物 洛谷

    https://www.luogu.org/problem/show?pid=1194 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近 ...

  9. 洛谷 P1194 【买礼物】

    这道题其实就是转化一个模型就可以了. 买了一个另外一个又优惠,其实就相当于在优惠的时候连一条边,因为不可能多买,所以就是建一棵最小生成树.最后因为肯定买了一件物品,要加上最初的单价. 代码: #inc ...

随机推荐

  1. LeetCode 45. 跳跃游戏 II | Python

    45. 跳跃游戏 II 题目来源:https://leetcode-cn.com/problems/jump-game-ii 题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素 ...

  2. string操作大全

    1. string to int && int to string 2. 整数1转换成字符串"001" int sprintf ( char * str, cons ...

  3. SSM整合案例:图书管理系统

    目录 SSM整合案例:图书管理系统 1.搭建数据库环境 2.基本环境搭建 2.1.新建一个Maven项目,起名为:ssmbuild,添加web的支持 2.2.导入pom的相关依赖 2.3.Maven静 ...

  4. Code::Blocks20.03 编译报错

    Code::Blocks最近出了新版20.03,进入官网选择下载了附带MinGW版的安装包后,编译HelloWorld就报错(CB一直以来都有问题,新版还是这样...) 主要有两个问题: ld.exe ...

  5. 【Scala】新手入门,基础语法概览

    目录 变量.常量和数据类型 var val 数据类型 条件表达式 块表达式 to循环 for循环 for推导式 scala中的方法和函数 方法的定义 函数的定义 函数和方法的区别 变量.常量和数据类型 ...

  6. 【Spark】必须要用CDH版本的Spark?那你是不是需要重新编译?

    目录 为什么要重新编译? 步骤 一.下载Spark的源码 二.准备linux环境,安装必须软件 三.解压spark源码,修改配置,准备编译 四.开始编译 为什么要重新编译? 由于我们所有的环境统一使用 ...

  7. vue省市区三级联动(高仿京东)

    该栗子是我直接从公司的项目单独拉出来的(懒得重新写一次了),所以代码会有些冗余,下面直接看效果: 接着上代码: html: <template> <div> <div c ...

  8. Spring初学笔记(二):Bean的注入

    关于Bean的注入 在上一篇中,已经说到虽然注入确实可以降低类与类之间的耦合,但并没有解决调用者必须知道类的创建方法的问题,也可以说是没有实现调用者与类实现的解耦,我们也提到,为了实现两者的解耦,可以 ...

  9. mysql安装之后需要调的参数

    http://www.mysqlperformanceblog.com/2014/01/28/10-mysql-settings-to-tune-after-installation/ 翻译加深理解. ...

  10. XShell 评估到期

    刚刚打开XShell弹出”评估到期“,点击确定后自动打开中文官网,得购买后才能使用. 当初下载的时候没留意到会有这一天.. 手头拮据的朋友可以通过下面方法绕过: 删除XShell. 到英文官网下载页找 ...