题目链接: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. 多传感器融合之滤波(一)——卡尔曼滤波(KF)推导
  2. 防火墙(15)——SNAT和DNAT,SNAT实践
  3. 机器人防火墙:人机识别在应用安全及风控领域的一点实践
  4. 熬夜给这个C语言游戏项目找了几个bug
  5. LeetCode MySQL 1285. 找到连续区间的开始和结束数字(dense_rank连续排名)
  6. python和台达plc通讯_台达PLC通信协议ModbusASCIIDVP
  7. mybatis 多表查询-多对多
  8. js 变量的声明能提升 初始化不会提升
  9. Java 三个线程依次输出ABC
  10. feign调用多个服务_SpringCloud服务间调用
  11. 378.有序矩阵中第k小的元素(力扣leetcode) 博主可答疑该问题
  12. Java常用设计模式的实例学习系列-绪论
  13. ODIN SNN处理器
  14. python自动视频剪辑_自动剪辑视频神器(适合自动剪 Vlog、视频教程等)
  15. matlab 矩阵 黑白,各位好 请问怎么用0 1矩阵画出黑白的矩阵如下图所示
  16. 程序员怎么跨年?跨年烟花网页支持自定义文本烟花
  17. 攻防世界easyphp解题wp
  18. 微信公众平台简易设计使用
  19. webpack打包vue项目之后dist文件夹在本地跑起来
  20. cad应用技巧:图层特性管理器

热门文章

  1. 3-1数据链路层-组帧
  2. 计算机音乐系统一般需要三种基本设备,如何共享 iTunes 音乐库计算机、 用户和 iOS 设备之间...
  3. 【CF183D】 T-shirt
  4. 互联网公司应该怎么发展猎头业务
  5. HDU 2154 跳舞毯 (递推)
  6. Unity中Quaternion * Vector3的理解
  7. 【NLP学习笔记】停用词(stop words)
  8. 日本公共廁所不爲人知的新功能
  9. [转载]Unity的RPG游戏装备系统的实现
  10. (蓝桥真题)剪格子(搜索+剪枝)