luogu题目传送门!

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

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


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

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

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

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

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

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

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

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

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

上板子代码:

#include <bits/stdc++.h>
using namespace std;
#define N 1000100
#define isdigit(c) ((c)>='0'&&(c)<='9')
#define orz 0 inline int read(){
int x = , s = ;
char c = getchar();
while(!isdigit(c)){
if(c == '-') s = -;
c = getchar();
}
while(isdigit(c)){
x = (x << ) + (x << ) + (c ^ '');
c = getchar();
}
return x * s;
} struct node{
int u, v, w;
} t[N];
int bian = ;
int fa[N];
int ans = ; int find(int x){
return x == fa[x] ? x : fa[x] = find(fa[x]);
} bool cmp (node a, node b){
return a.w < b.w;
} void kruskal(int pri, int n){
for(int i = ;i <= n; i++) fa[i] = i;
sort(t + , t + bian + , cmp);
for(int i = ;i <= bian; i++){
int u = t[i].u, v = t[i].v, w = t[i].w;
int fau = find(u), fav = find(v);
if(fau != fav){
fa[fau] = fav;
ans += (w < pri ? w : pri); /*毒瘤数据可能出现 w > pri 的情况,这种时候肯定选择 pri*/
}
}
return ;
} int main(){
// freopen("hh.txt", "r", stdin);
int pri = read(), n = read();
for(int i = ;i <= n; i++){
for(int j = ;j <= n; j++){
int x = read();
if(x != ){ /*注意给边去重!!*/
t[++bian].u = i;
t[bian].v = j;
t[bian].w = x;
}
}
}
kruskal(pri, n);
for(int i = ;i <= n; i++)
if(fa[i] == i)ans += pri; /*可能出现有的物品没有优惠或者是图中的第一个*/
printf("%d\n", ans);
return orz; /*向dalao低头*/
}

(板子) 最小生成树 买礼物 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. 重新认识Java注解

    重新认识Java注解 今天Debug看源码的时候,无意间看到这么个东西 首先承认我的无知,看到这个我很惊诧. 也勾起了我的好奇心,于是有了这篇认知记录. 下面就来重新认识下注解吧! 注解的本质 关于运 ...

  2. Python高级编程-Python一切皆对象

    Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 ""&qu ...

  3. HTML data-* 属性的含义和使用

      data-*自定义数据属性 首先讲一下语法格式: data-* =“值” data-* 属性包括两部分: 属性名不应该包含任何大写字母,并且在前缀 "data-" 之后必须有至 ...

  4. CGI (通用网关接口)

    CGI cgi即 Common Gateway Interface 译作 通用网关接口 是应用程序与应用程序之间的输入输出协议.比如我们写信,规定了开头一句写称呼,中间写内容,最后署名和日期.看到这种 ...

  5. 【Hadoop离线基础总结】Hive的基本操作

    Hive的基本操作 创建数据库与创建数据库表 创建数据库的相关操作 创建数据库:CREATE TABLE IF NOT EXISTS myhive hive创建表成功后的存放位置由hive-site. ...

  6. ssh暴力破解解决方案(Centos7更改端口)

    服务器默认ssh远程连接端口为22端口,通常通过22远程连接的话,容易有ssh暴力破解的风险,给我们造成一定的损失.下面是更换ssh端口过程: 1.添加ssh端口 vim /etc/ssh/sshd_ ...

  7. Spark SQL源码解析(四)Optimization和Physical Planning阶段解析

    Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 Spark SQL源码解析(二)Antlr4解析Sql并生成树 Spark SQL源码解析(三 ...

  8. 内容安全策略(CSP)详解

    1.背景 1.1.同源策略 网站的安全模式源于"同源策略",web浏览器允许第一个web页面中的脚本访问页面中的数据,但前提是两个web页面具有相同的源.此策略防止一个页面的恶意脚 ...

  9. java8 新特性Stream流的应用

    作为一个合格的程序员,如何让代码更简洁明了,提升编码速度尼. 今天跟着我一起来学习下java 8  stream 流的应用吧. 废话不多说,直入正题. 考虑以下业务场景,有四个人员信息,我们需要根据性 ...

  10. Android Loader使用时,屏幕解锁后,重复加载

    在使用AsyncTaskLoader时,当手机解锁后,会重复加载数据,代码如下: static class CouponShopQueryLoader extends AsyncTaskLoader& ...