超市购物(并查集)

Posted SSL_LKJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超市购物(并查集)相关的知识,希望对你有一定的参考价值。

超市购物

在这里插入图片描述

解题思路

将每个时间点看作一个集合
把收益按从大到小排序

AC代码

#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int n,ans,f[10005];
struct node
{
	int p,d;
}a[10005];
bool cmp(node x,node y)
{
	return x.p>y.p;
}
int find(int x)//找爸爸
{
	if(f[x]==x)return x;
	return f[x]=find(f[x]);
}
int main()
{
	while(cin>>n)
	{
		ans=0;
		for(int i=1;i<=n;i++)scanf("%d%d",&a[i].p,&a[i].d);
		for(int i=1;i<=10000;i++)f[i]=i;//初值
		sort(a+1,a+n+1,cmp);//排序
		for(int i=1;i<=n;i++)
		{
			int x=find(a[i].d);//查找集合
			if(x)//判断是否为0
			{
				ans+=a[i].p;//累加
				f[x]=x-1;//时间-1
			}
		}
		printf("%d\\n",ans);
	}
	return 0;
}

谢谢

以上是关于超市购物(并查集)的主要内容,如果未能解决你的问题,请参考以下文章

关于并查集的一切全在这里了

想要学会并查集吗?看我四十行代码实现它

树--12---并查集

笔记并查集---无向图处理代码模板及类型题

并查集

力扣 每日一题 886. 可能的二分法难度:中等,rating: 1794(并查集 / 拆点优化的扩展域并查集)