(板子) 最小生成树 买礼物 luogu P1194
懒得找最小生成树模板了,就把这题当板子吧。
最小生成树,就是指对于一张图,我们将图转换成一棵树,连通的,同时让所有的边尽可能的小(废话)。
最小生成树一般都采用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的更多相关文章
- 洛谷 P1194 买礼物 题解
P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买\(B\)样东西,巧的是,这\(B\)样东西价格都是\(A\)元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第II样东西 ...
- 洛谷——P1194 买礼物
P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只 ...
- P1194 买礼物(建模)
P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只 ...
- 洛谷 P1194 买礼物
洛谷 P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第II样东西,再买第J样,那么 ...
- 2017广东工业大学程序设计竞赛决赛-tmk买礼物
tmk买礼物 Description 今天是校赛的日子,为了庆祝这么喜庆的日子,TMK打算买些礼物给女票LSH庆祝一下. TMK进入了雪梨超市,然后刚踏入的一瞬间,店主就对TMK说:“恭喜你成为了本店 ...
- luogu P1194 买礼物
题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只花K[I,J]元,更 ...
- P1194 买礼物
题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只花K[I,J]元,更 ...
- P1194 买礼物 洛谷
https://www.luogu.org/problem/show?pid=1194 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近 ...
- 洛谷 P1194 【买礼物】
这道题其实就是转化一个模型就可以了. 买了一个另外一个又优惠,其实就相当于在优惠的时候连一条边,因为不可能多买,所以就是建一棵最小生成树.最后因为肯定买了一件物品,要加上最初的单价. 代码: #inc ...
随机推荐
- LeetCode 45. 跳跃游戏 II | Python
45. 跳跃游戏 II 题目来源:https://leetcode-cn.com/problems/jump-game-ii 题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素 ...
- string操作大全
1. string to int && int to string 2. 整数1转换成字符串"001" int sprintf ( char * str, cons ...
- SSM整合案例:图书管理系统
目录 SSM整合案例:图书管理系统 1.搭建数据库环境 2.基本环境搭建 2.1.新建一个Maven项目,起名为:ssmbuild,添加web的支持 2.2.导入pom的相关依赖 2.3.Maven静 ...
- Code::Blocks20.03 编译报错
Code::Blocks最近出了新版20.03,进入官网选择下载了附带MinGW版的安装包后,编译HelloWorld就报错(CB一直以来都有问题,新版还是这样...) 主要有两个问题: ld.exe ...
- 【Scala】新手入门,基础语法概览
目录 变量.常量和数据类型 var val 数据类型 条件表达式 块表达式 to循环 for循环 for推导式 scala中的方法和函数 方法的定义 函数的定义 函数和方法的区别 变量.常量和数据类型 ...
- 【Spark】必须要用CDH版本的Spark?那你是不是需要重新编译?
目录 为什么要重新编译? 步骤 一.下载Spark的源码 二.准备linux环境,安装必须软件 三.解压spark源码,修改配置,准备编译 四.开始编译 为什么要重新编译? 由于我们所有的环境统一使用 ...
- vue省市区三级联动(高仿京东)
该栗子是我直接从公司的项目单独拉出来的(懒得重新写一次了),所以代码会有些冗余,下面直接看效果: 接着上代码: html: <template> <div> <div c ...
- Spring初学笔记(二):Bean的注入
关于Bean的注入 在上一篇中,已经说到虽然注入确实可以降低类与类之间的耦合,但并没有解决调用者必须知道类的创建方法的问题,也可以说是没有实现调用者与类实现的解耦,我们也提到,为了实现两者的解耦,可以 ...
- mysql安装之后需要调的参数
http://www.mysqlperformanceblog.com/2014/01/28/10-mysql-settings-to-tune-after-installation/ 翻译加深理解. ...
- XShell 评估到期
刚刚打开XShell弹出”评估到期“,点击确定后自动打开中文官网,得购买后才能使用. 当初下载的时候没留意到会有这一天.. 手头拮据的朋友可以通过下面方法绕过: 删除XShell. 到英文官网下载页找 ...