(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,二是他们可以借助都可到达的第三台已修复的电脑.给出所有电脑的坐标位置, ...
最新文章
- N!-201308071627.txt
- mysql load 占位符_Mysql占位符插入
- c语言函数求pi的近似值,C语言 用π/4=1-1/3+1/5-1/7+... 求π的近似值
- How Unreal Engine 4 Will Change The Next Games You Play
- 吴恩达深度学习3.2笔记_Structuring Machine Learning Projects_机器学习策略(2)
- python字符串find方法(二分钟读懂)
- 用 pre-commit hook 解决 Python 项目编码规范
- 解决WINDOWS 7中显示摄像头的简易方法
- TDS、NET-Library和网络协议
- Excel VBA为表格设置“打开文件密码”
- 2019 年技术大趋势预测
- 蓝桥java练习记录
- FreeSwitch学习(1)-总体简介
- 【玩转嵌入式屏幕显示】(三)TFT-LCD屏幕打点 + 画线 + 画矩形 + 画圆Bresenham算法实现(基于打点函数,算法可移植到任何屏幕的驱动程序之上)
- JavaScript脚本语言基础(三)
- mysql下载64位 太平洋,Win10 64位安装MySQL5.6.35的详细教程
- Mysql登录和修改初始化密码
- chalk5.0.0不支持require()导入问题
- 如何用VBS执行文件?
- C语言中printf打印形式(%02X, %2X, %-2X, %.nf, %m.nf, %e, %m.ne, %2d, %-2d, %02d, %.2d)