题意:产品有保质期和利润,一天卖出一个产品,求最大利润和
分析:贪心肯定是要有的,所以排序,然后可以使用优先队列,并查集等方法解出
(利用并查集来实现自动连接的链表,也是6了)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
#define maxn 100005
int n;
struct node
{
int p,d;
};
node s[maxn];
int fa[maxn];
bool cmp(node a,node b)
{
return a.p > b.p;
}
int find(int x)
{
if( x == fa[x] ) return x;
return fa[x] = find(fa[x]);
}
int main()
{
while( cin >> n )
{
for(int i = 0 ; i < maxn ; ++i)fa[i] = i;
for(int i = 0 ; i < n ; ++i)
{
scanf("%d %d",&s[i].p,&s[i].d);
}
sort( s,s+n,cmp );
int ans = 0;
for(int i = 0 ; i < n ; ++i)
{
int t = find( s[i].d );
if( t > 0 )
{
ans += s[i].p;
fa[t] = t - 1;
}
}
cout << ans << endl;
}
}