POJ 1456 Supermarket
来源:互联网 发布:怀化学院教育网络系统 编辑:程序博客网 时间:2024/05/21 09:24
/*贪心的题目 用并查集优化 取d左边最近的一点为根节点*/
#include<cstdio>#include<cstring>#include<cstdlib>struct S{ int p,d;} a[10010];int p[10010];int find(int x){ return x==p[x]?x:p[x]=find(p[x]);}int cmp(const void *a,const void *b){ struct S *p = (struct S *)a; struct S *q = (struct S *)b; return q->p-p->p;}int main(){ int n; while(scanf("%d",&n)==1) { for(int i = 0; i <= 10000; i++) p[i] = i; for(int i = 0; i < n; i++) scanf("%d%d",&a[i].p,&a[i].d); qsort(a,n,sizeof(a[0]),cmp); int ans=0; for(int i = 0; i < n; i++) { int px = find(a[i].d); if(px>0) { p[px] = px-1; ans+=a[i].p; } } printf("%d\n",ans); } return 0;}