洛谷 P1194 买礼物 题解
P1194 买礼物
题目描述
又到了一年一度的明明生日了,明明想要买\(B\)样东西,巧的是,这\(B\)样东西价格都是\(A\)元。
但是,商店老板说最近有促销活动,也就是:
如果你买了第II样东西,再买第JJ样,那么就可以只花\(K_{I,J}\)元,更巧的是,\(K_{I,J}\)竟然等于\(K_{J,I}\)。
现在明明想知道,他最少要花多少钱。
输入格式
第一行两个整数,\(A,B\)。
接下来\(B\)行,每行\(B\)个数,第\(I\)行第\(J\)个为\(K_{I,J}\)。
我们保证\(K_{I,J}=K_{J,I}\)并且\(K_{I,I}=0\)。
特别的,如果K_{I,J}=0KI,J=0,那么表示这两样东西之间不会导致优惠。
输出格式
一个整数,为最小要花的钱数。
输入输出样例
输入 #1
1 1
0
输出 #1
1
输入 #2
3 3
0 2 4
2 0 2
4 2 0
输出 #2
7
说明/提示
样例解释\(2\)
先买第\(2\)样东西,花费\(3\)元,接下来因为优惠,买\(1,3\)样都只要\(2\)元,共\(7\)元。
(同时满足多个“优惠”的时候,聪明的明明当然不会选择用\(4\)元买剩下那件,而选择用\(2\)元。)
数据规模
对于\(30\%\)的数据,\(1 \le B \le 10\)。
对于\(100\%\)的数据,\(1 \le B \le 500,0 \le A,K_{I,J} \le 1000\)。
2018.7.25新添数据一组
【思路】
最小生成树(克鲁斯卡尔) + 并查集
很有意思
在买了一个东西之后买另一个东西会有不同的价格
这就可以看成建立一颗最小生成树
然后跑就可以了
不过这道题显然没有那么简单的
不然就真成为了一道克鲁斯卡尔板子题了
还需要考虑一个东西
不需要很大的思维了只是要细心
第一个买的东西是不是需要钱?
这是必然需要的
所以ans可以一开始就赋值为aa的价格
注意:
输入0就表示输入的原价购买没有优惠!
【完整代码】
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int Max = 505;
struct node
{
int x,y;
int w;
}a[Max * Max];
int father[Max << 1];
bool cmp(const node x,const node y)
{
return x.w < y.w;
}
int find(int x)
{
if(father[x] != x)father[x] = find(father[x]);
return father[x];
}
void hebing(int x,int y)
{
x = find(x);
y = find(y);
father[x] = y;
}
int main()
{
int aa,b;
cin >> aa >> b;
int js = 0;
int jj = 0;
for(register int i = 1;i <= b;++ i)
father[i] = i;
for(register int i = 1;i <= b;++ i)
for(register int j = 1;j <= b;++ j)
{
cin >> a[++ jj].w,a[jj].x = i,a[jj].y = j;
if(a[jj].w == 0)a[jj].w = aa;
}
sort(a + 1,a + 1 + jj,cmp);
int ans = aa;
for(register int i = 1;i <= jj;++ i)
{
if(find(a[i].x) != find(a[i].y))
hebing(a[i].x,a[i].y),js ++,ans += a[i].w;
}
cout << ans << endl;
return 0;
}
洛谷 P1194 买礼物 题解的更多相关文章
- 洛谷 P1194 买礼物
洛谷 P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第II样东西,再买第J样,那么 ...
- 洛谷——P1194 买礼物
P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只 ...
- 洛谷P5364 [SNOI2017]礼物 题解
传送门 /* 热情好客的小猴子请森林中的朋友们吃饭,他的朋友被编号为 1∼N,每个到来的朋友都会带给他一些礼物:大香蕉.其中,第一个朋友会带给他 11 个大香蕉,之后,每一个朋友到来以后,都会带给他之 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
- P1194 买礼物(建模)
P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只 ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
- 洛谷P1577 切绳子题解
洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
随机推荐
- 终于明白六大类UML类图关系了
UML,全称Unified Modeling Language,统一建模语言.而UML图分为用例图.类图.对象图.状态图.活动图.时序图.协作图.构件图.部署图等9种图. 在面向对象语言中,我们经常看 ...
- Spring Cloud Alibaba学习笔记(24) - Spring Boot Actuator 监控数据可视化:Spring Boot Admin
我们都知道,Spring Boot Actuator 提供监控数据是Json数据,在某种程度来说并不利于分析查看,那么如何将其进行可视化呢?我们有很多种选择,但是目前在这个领域,最流行的是Spring ...
- 使用jQuery开发accordion手风琴插件
一.插件效果 手风琴插件常用的功能均已实现,包括:手风琴菜单项的折叠展开效果.选中指定菜单项.判断菜单项是否选中等. 效果如下: 二.插件内部HTML元素结构 <!-- accordioon组件 ...
- 微信小程序实现下拉刷新上拉加载
代码片段:https://developers.weixin.qq.com/s/K9VbWZmy7e8C
- centos 7.6 修改vim配色方案
cd ~ vim .vimrc colorscheme desert
- kafka原理与组件
一.什么是kafkakafka的目标是实现一个为处理实时数据提供一个统一.高吞吐.低延迟的平台.是分布式发布-订阅消息系统,是一个分布式的,可划分的,冗余备份的持久性的日志服务.Kafka使用场景:1 ...
- IP positioning check position
1.如何找到网上散布不法言论的人的地理位置 比方像微博发布的时候都会自动添加主机网络地址,需要对头文件进行分析 找到IP地址 然后进行反查IP地址的位置 , 如果是可以与要查的终端可以进行通信 ,可以 ...
- edgex简述
一.概述 Edgex foundry是一个Linux 基金会运营的开源边缘计算物联网软件框架项目,该项目的核心是基于与硬件和操作系统完全无关的参考软件平台建立的互操作框架,使能即插即用的组件生态系统, ...
- Elasticsearch 术语介绍和CRUD实际操作入门
一.Elastic Stack 核心Elasticsearch Elasticsearch 是一个分布式.RESTful 风格的搜索和数据分析引擎.Elasticsearch 是面向文档的,这就意味着 ...
- 如何设置CentOS 7获取动态IP和静态IP
自动获取动态IP地址 1.输入“ip addr”并按回车键确定,发现无法获取IP(CentOS 7默认没有ifconfig命令),记录下网卡名称(本例中为ens33). 2.输入“cd /etc/sy ...