题目链接

题意:给你n个商品,商品的利润和商品的过期时间,商品必须在过期时间内卖才能算利润,每天只能卖一件商品,问利润最大值。

思路:用并查集+贪心的思路,先给商品从大到小排序,然后选择过期时间的根节点,再将根节点和根节点-1的时间merge,当根节点不为0,累计加上利润

最后求得最大值。因为过期时间具有传递性,你在第n天卖等价于第n-1天卖,很容易证得思路的正确性。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<cmath>
#define ll long long
using namespace std;
struct point
{
int x;
int y;
}a[];
int fa[];
bool cmp(point a,point b)
{
return a.x>b.x;
}
int get(int k)
{
return fa[k]==k?k:fa[k]=get(fa[k]);
}
void merge(int x,int y)
{
fa[get(x)]=get(y);
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=;i<n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
}
for(int i=;i<=;i++)
{
fa[i]=i;
}
sort(a,a+n,cmp);
/* for(int i=0;i<n;i++)
{
printf("x:%d y:%d\n",a[i].x,a[i].y);
}*/
int sum=;
for(int i=;i<n;i++)
{
int r=get(a[i].y);
// printf("r:%d\n",r);
if(r!=)
{
sum+=a[i].x;
merge(r,r-);
}
}
printf("%d\n",sum);
}
}

最新文章

  1. exiv2 如何改变时间戳
  2. jQuery 正则选择器
  3. 一个App完成入门篇(三)-完善主框架
  4. SharePoint Online 创建门户网站系列之图片滚动
  5. 【leetcode】Single Number II (medium) ★ 自己没做出来....
  6. HTML5播放器
  7. javascript 快速排序
  8. XSS【跨站脚本攻击】
  9. java 强弱引用
  10. ecshop中ajax的调用原理 1
  11. 【翻译】Ext JS最新技巧——2014-9-10
  12. MySQL学习基础知识1
  13. [ExecuteInEditMode]
  14. js 1+&#39;2&#39; == &#39;1&#39;+&#39;2&#39;
  15. HTTP请求头及其作用 转
  16. git常用命令和场景
  17. myeclipse删除项目后重新导入
  18. js 的各种排序算法 -- 待续
  19. 一个事件激活多个JavaScript函数
  20. assert 函数

热门文章

  1. linux常用符号命令
  2. Java的常用类 String
  3. C++ 编写的DLL导出的函数名乱码含义解析
  4. 本站页脚HTML回顶部代码
  5. Nginx 配置 location 以及 return、rewrite 和 try_files 指令
  6. Maven安装、配置环境变量
  7. #python# 使用代理和不使用代理对比
  8. CodeChef Gcd Queries
  9. 【学习总结】java数据结构和算法-第二章-数据结构和算法概述
  10. 解决java compiler level does not match the version of the installed java project facet问题