#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//贪心+并差集 分析清晰 没掌握 典型题 背
//英语 抄博友程序
int fa[10008];
struct nod{
int p;
int d;
};
bool cmp(nod x,nod y)
{
return x.p>y.p;
}
int find(int x)
{
if(fa[x]==x)
{
return x;
}else
{
return fa[x]=find(fa[x]);//抄博友 背
}
}
int main()
{
int n;
while(cin>>n)
{
for(int i=1;i<=10000;i++)
{
fa[i]=i;
}
vector<nod> ve;
for(int i=0;i<n;i++)
{
nod t;
cin>>t.p>>t.d;
ve.push_back(t);
}
sort(ve.begin(),ve.end(),cmp);
int sum=0;
for(int i=0;i<n;i++)//抄博友
{
int t=find(ve[i].d);
if(t>0)
{
sum=sum+ve[i].p;
fa[t]=t-1;
}
}
cout<<sum<<endl;
}
return 0;
}
使用并查集时,选保质期3天的 会对保质期大于等于2天的造成影响。