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 买礼物 题解的更多相关文章

  1. 洛谷 P1194 买礼物

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

  2. 洛谷——P1194 买礼物

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

  3. 洛谷P5364 [SNOI2017]礼物 题解

    传送门 /* 热情好客的小猴子请森林中的朋友们吃饭,他的朋友被编号为 1∼N,每个到来的朋友都会带给他一些礼物:大香蕉.其中,第一个朋友会带给他 11 个大香蕉,之后,每一个朋友到来以后,都会带给他之 ...

  4. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  5. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  6. P1194 买礼物(建模)

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

  7. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  8. 洛谷P1577 切绳子题解

    洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...

  9. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

随机推荐

  1. c# NPOI文件操作

    public static Byte[] RenderDataToExcel<T>(List<T> SourceList, List<String> filter) ...

  2. Rediskey生命周期管理-key聚合

    | 导语 Redis中的数据以k-v的方式组织:为了方便管理key一般具有某些特定的模式:有些key直接是由mysql中的表行数据转化而来:如果要对Redis的key进行生命周期管理,由于Redis的 ...

  3. SpringBoot打成jar包后无法读取resources资源文件

    在项目中做了一个支付功能, 需要引入第三方渠道的配置文件config.xml用来初始化文件证书, 将配置文件 config.xml 放到 resources 资源目录下. 本地开发环境下能正常读取该文 ...

  4. VBA 字符串-相关函数(1-5)

    Instr()函数 InStr()函数返回一个字符串第一次出现在一个字符串,从左到右搜索.返回搜索到的字符索引位置. 语法 InStr([start,]string1,string2[,compare ...

  5. 命令行获取docker远程仓库镜像列表

    命令行获取docker远程仓库镜像列表 获取思路 通过curl获取镜像tag的json串,解析后得到${image}:${tag}的格式 curl获取示例 # curl [:-s] ${API}/${ ...

  6. 虚拟机与宿主机可以互相ping通,但是外网不能

    http://rickcheung.blog.51cto.com/913220/354429 1.CentOS 修改DNS 修改对应网卡的DNS的配置文件 # vi /etc/resolv.conf  ...

  7. 嵌入式处理器通过UART实现scanf和printf

    #include <stdint.h> #include <stdarg.h> extern int vsscanf(const char *, const char *, v ...

  8. [MySQL]重装数据库后无法启动服务

    具体情况请查看下面网址 https://www.jianshu.com/p/8dda50ee812f 错误信息可以在CMD里输入mysqld --console查看

  9. c#指定长度切割字符串,返回数组

    public List<string> subStringByCount(string text, int count) { ;//开始索引 ;//结束索引 double count_va ...

  10. linux下安装dotnet core

    windows下安装linux系统需要用到VMware 这个软件,可自行百度下载,然后安装centos7系统安装 centos下安装dotnetcore 在终端输入命令: sudo yum insta ...