Supermarke
拿来熟悉一下并查集,有点忘了
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
int pre[10005],rank[10005],n;
struct node{
int px,dx;
}arr[10005];
bool cmp(node a,node b){
return a.px>b.px;
}
int find(int x)
{
if(pre[x]==x) return x;
return pre[x]=find(pre[x]);
}
void Union(int a,int b)//合并
{
pre[b]=a;
}
void init(int n){
for(int i=0;i<=n;i++) pre[i]=i,rank[i]=0;
}
int main()
{
while(cin>>n)
{
int maxTime=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&arr[i].px, &arr[i].dx);
if(arr[i].dx>maxTime) maxTime=arr[i].dx;
}
init(maxTime);
sort(arr,arr+n,cmp);
int ans=0,pos=0;
for(int i=0;i<n;i++)
{
int d=find(arr[i].dx);
if(d>0)
{
ans+=arr[i].px;
pre[d]=d-1;
}
}
printf("%d\n",ans);
}
return 0;
}