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;}
原创粉丝点击