(POJ - 1456)Supermarket(并查集)
题目链接:1456 -- Supermarket
原题意比较难理解,下面我给出一个简化版的理解方式:超市里有n个商品。第i个商品必须在保质期(第di天及之前)卖掉,若卖掉可让超市获得pi的利润,但是每天只能卖一件商品,现在你要让超市获得最大的利润,问最大的利润是多少,多组数据
分析:贪心的思想,就是我们先把商品按照利润进行排序,同样是花费一天,能把利润高的商品卖掉就先把利润高的商品卖掉,但是在当前条件允许的情况下能多晚卖就多晚卖(为了给一些利润低但是保质期短的商品多提供一些时间),很明显这是一个正确的贪心策略,但是我们如何实现呢,我们不可能对于任意一件商品都从其保质期截至日期开始往前寻找,若找到一天可用来卖当前商品就卖,否则就不卖,这样复杂度有点高,我们可以用并查集来实现这个过程规定fu[i]为从i开始往前找可以找到的空余时间,初始设置为i,每次使用完这个空余时间后我们令fu[fu[i]]=fu[i]-1,(若fu[i]<1则该商品无法卖出)由于并查集查找过程中有路径压缩,所以会大大减少我们的查询时间
下面是代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
const int N=10003;
int fu[N];
struct node{int d,p;
}p[N];
bool cmp(node a,node b)
{return a.p>b.p;
}
int find(int x)
{if(x==fu[x]) return x;return fu[x]=find(fu[x]);
}
int main()
{int n;while(scanf("%d",&n)!=EOF){for(int i=1;i<=10000;i++)fu[i]=i;for(int i=1;i<=n;i++)scanf("%d%d",&p[i].p,&p[i].d);sort(p+1,p+n+1,cmp);long long ans=0;for(int i=1;i<=n;i++){int f=find(p[i].d);if(f>=1){fu[f]=f-1;ans+=p[i].p;}}printf("%lld\n",ans);}return 0;
}
(POJ - 1456)Supermarket(并查集)相关推荐
- A Bug‘s Life POJ 2492 加权并查集
A Bug's Life POJ 2492 加权并查集 传送门:http://poj.org/problem?id=2492 Description Background Professor Hopp ...
- poj 1456 Supermarket (贪心, 并查集)
链接: http://poj.org/problem?id=1456 题目: Description A supermarket has a set Prod of products on sale. ...
- poj 1456 Supermarket 贪心+并查集(个人感觉有点难判断出来
poj 1456 这第一眼还觉得只要贪心就可以了,但是emmm看了大佬的题解居然真的要用到并查集= = 大佬清晰的思路 大佬舒服的代码 #pragma warning(disable:4996) #i ...
- 【贪心】 POJ 1456 Supermarket 详解 (并查集/二叉堆优化)
题目链接:POJ-1456 题目大意 有n件商品,每件商品的利润为,销售日期的截止时间为(即只能在时间前销售该物品).一天只能销售一件物品.问这n件商品的最大利润为多少 方案一 分析 有两种贪心策略, ...
- Poj(1703),种类并查集
题目链接:http://poj.org/problem?id=1703 已经不是第一次接触种类并查集了,直到今天才搞懂. 感谢红黑联盟,感谢杰哥!!! 每个节点只要关系确定,不管是不是同一个集合里面, ...
- POJ 1182 食物链 [并查集 带权并查集 开拓思路]
传送门 P - 食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit ...
- poj 1182 食物链 并查集
转自一位大佬的最全题解 https://blog.csdn.net/c0de4fun/article/details/7318642 #include <cstdio> #include ...
- poj 1703(种类并查集)
题目大意:在这个城市里有两个黑帮团伙,现在给出N个人,问任意两个人他们是否在同一个团伙 输入D x y代表x于y不在一个团伙里 输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙里 解 ...
- poj 1611 TheSuspects 并查集 连通图
题意: 有一个学校,有N个学生,编号为0-N-1,现在0号学生感染了非典,凡是和0在一个社团的人就会感染,并且这些人如果还参加了别的社团,他所在的社团照样全部感染,求感染的人数. Input: 输入文 ...
- poj 2236 WirelessNetwork 并查集
题意: 有n台损坏的电脑,现要将其逐台修复,且使其相互恢复通信功能.若两台电脑能相互通信,则有两种情况,一是他们之间的距离小于d,二是他们可以借助都可到达的第三台已修复的电脑.给出所有电脑的坐标位置, ...
最新文章
- 多传感器融合之滤波(一)——卡尔曼滤波(KF)推导
- 防火墙(15)——SNAT和DNAT,SNAT实践
- 机器人防火墙:人机识别在应用安全及风控领域的一点实践
- 熬夜给这个C语言游戏项目找了几个bug
- LeetCode MySQL 1285. 找到连续区间的开始和结束数字(dense_rank连续排名)
- python和台达plc通讯_台达PLC通信协议ModbusASCIIDVP
- mybatis 多表查询-多对多
- js 变量的声明能提升 初始化不会提升
- Java 三个线程依次输出ABC
- feign调用多个服务_SpringCloud服务间调用
- 378.有序矩阵中第k小的元素(力扣leetcode) 博主可答疑该问题
- Java常用设计模式的实例学习系列-绪论
- ODIN SNN处理器
- python自动视频剪辑_自动剪辑视频神器(适合自动剪 Vlog、视频教程等)
- matlab 矩阵 黑白,各位好 请问怎么用0 1矩阵画出黑白的矩阵如下图所示
- 程序员怎么跨年?跨年烟花网页支持自定义文本烟花
- 攻防世界easyphp解题wp
- 微信公众平台简易设计使用
- webpack打包vue项目之后dist文件夹在本地跑起来
- cad应用技巧:图层特性管理器