版权声明:虽然本蒟蒻很菜,但各位dalao转载请注明出处谢谢。 https://blog.csdn.net/xuxiayang/article/details/89190193
原题
#include<cstdio>
#include<algorithm>
using namespace std;long long n,f[200001],tot,t,p,s;
struct node{long long t,p;}a[200001];
inline bool cmp(node x,node y){return x.p>y.p||x.p==y.p&&x.t<y.t;}
inline long long find(long long x){return x==f[x]?x:f[x]=find(f[x]);}
signed main()
{
scanf("%lld",&n);
for(register int i=1;i<=n;i++)
{
scanf("%lld%lld",&t,&p);
if(p>0) a[++tot]=(node){min(t,n),p};
f[i]=i;
}
sort(a+1,a+1+tot,cmp);
for(register int i=1;i<=tot;i++)
{
int fx=find(a[i].t);
f[fx]=find(fx-1);//向上一个时间点离连边
if(fx) s+=a[i].p;//时间是够的
}
printf("%lld",s);
}