poj 1456 贪心+并查集优化(卖带截止时间货物的最大利润)

题意:给定若干商品,每种商品有两个属性,一个是其售价,另一个是其最晚售出时间,超过这个时间此商品就算作废。每单位时间最多出售一种商品。给定出n个商品的属性值,问怎样安排这些商品能使得利益最大(假设商品想卖就卖)。

思路:一开始自己的思路是按照截止时间从大到小排序,相同的截止时间按照售价从大到小排序,每次挑截止时间最大且售价最大的那个,然后将剩下中的和选出截止时间相同的时间都减1,再排序。每轮都排序浪费时间所以TLE,不知道这个思路加优先队列优化行不行……

正确的思路是按照售价从大到小排序,用并查集优化。那么find(x)表示x时间之前最大的可出售时间。

#include 
#define N 10005
struct node{
	int t,w;
}p[N];
int n,father[N];
int cmp(const struct node *a,const struct node *b){
	if((*a).w == (*b).w)
		return (*b).t - (*a).t;
	return (*b).w - (*a).w;
}
int find(x){
	if(father[x] == x)
		return x;
	return father[x] = find(father[x]);
}
int main(){
	freopen("a.txt","r",stdin);
	while(scanf("%d",&n)!=EOF){
		int i,j,res=0;
		for(i = 0;i


你可能感兴趣的:(数据结构,贪心)