题目链接: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(并查集)相关推荐

  1. A Bug‘s Life POJ 2492 加权并查集

    A Bug's Life POJ 2492 加权并查集 传送门:http://poj.org/problem?id=2492 Description Background Professor Hopp ...

  2. poj 1456 Supermarket (贪心, 并查集)

    链接: http://poj.org/problem?id=1456 题目: Description A supermarket has a set Prod of products on sale. ...

  3. poj 1456 Supermarket 贪心+并查集(个人感觉有点难判断出来

    poj 1456 这第一眼还觉得只要贪心就可以了,但是emmm看了大佬的题解居然真的要用到并查集= = 大佬清晰的思路 大佬舒服的代码 #pragma warning(disable:4996) #i ...

  4. 【贪心】 POJ 1456 Supermarket 详解 (并查集/二叉堆优化)

    题目链接:POJ-1456 题目大意 有n件商品,每件商品的利润为,销售日期的截止时间为(即只能在时间前销售该物品).一天只能销售一件物品.问这n件商品的最大利润为多少 方案一 分析 有两种贪心策略, ...

  5. Poj(1703),种类并查集

    题目链接:http://poj.org/problem?id=1703 已经不是第一次接触种类并查集了,直到今天才搞懂. 感谢红黑联盟,感谢杰哥!!! 每个节点只要关系确定,不管是不是同一个集合里面, ...

  6. POJ 1182 食物链 [并查集 带权并查集 开拓思路]

    传送门 P - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit  ...

  7. poj 1182 食物链 并查集

    转自一位大佬的最全题解 https://blog.csdn.net/c0de4fun/article/details/7318642 #include <cstdio> #include ...

  8. poj 1703(种类并查集)

    题目大意:在这个城市里有两个黑帮团伙,现在给出N个人,问任意两个人他们是否在同一个团伙 输入D x y代表x于y不在一个团伙里 输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙里 解 ...

  9. poj 1611 TheSuspects 并查集 连通图

    题意: 有一个学校,有N个学生,编号为0-N-1,现在0号学生感染了非典,凡是和0在一个社团的人就会感染,并且这些人如果还参加了别的社团,他所在的社团照样全部感染,求感染的人数. Input: 输入文 ...

  10. poj 2236 WirelessNetwork 并查集

    题意: 有n台损坏的电脑,现要将其逐台修复,且使其相互恢复通信功能.若两台电脑能相互通信,则有两种情况,一是他们之间的距离小于d,二是他们可以借助都可到达的第三台已修复的电脑.给出所有电脑的坐标位置, ...

最新文章

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

热门文章

  1. 数据挖掘常见的 p-value 解读
  2. 数字孪生城市3D可视化展示系统多维展示规划成果
  3. 现代密码学(Cryptography)经典习题及解法(一)
  4. Hive的Rank排名(rank函数,dense_rank函数,row_numer函数)
  5. Request 获取请求的 URL
  6. 电子商务利用了计算机网络哪些特性,电子商务概述大题答案
  7. webrtc媒体服务器介绍
  8. HTML去除无序列表的默认样式
  9. 全球市场包装ISTA认证
  10. 梯度下降、ISTA和FISTA算法收敛速率推导