zoukankan      html  css  js  c++  java
  • 【并查集的另一个思考方向】POJ1456

    POJ1456

    这个题一看好像就是用贪心做啊,一个结构体,拍一下序,vis数组一遍遍扫荡,最后输出值,没错,贪心的确能做出来,而这类题目也能应用并查集,实现得思想也是贪心

    #include <iostream>
    #include <string.h>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int maxn = 1e4 + 1e2;
    int pre[maxn];
    int n;
    struct node
    {
        int p,d;
    }obj[maxn];
    void init()
    {
        for(int i = 0;i < maxn;i++)
        {
            pre[i] = i;
        }
        memset(obj,0,sizeof(obj));
    }
    bool cmp(node a,node b)
    {
        return a.p > b.p;
    }
    

     一开始都差不多哈,并查集pre【i】得含义是第i天前第一个空得天数是第几天!!(差不多了吧和你反向暴力一遍vis数组貌似差不多)

    但是并查集能路径压缩欸

    int Find(int x)
    {
        if(x != pre[x])
        {
            int tem = pre[x];
            pre[x] = Find(tem);
        }
        return pre[x];
    }
    
    int main()
    {
        int n,a,d;
        while(~scanf("%d",&n))
        {
            init();
            for(int i = 0;i < n;i++)
            {
                scanf("%d%d",&obj[i].p,&obj[i].d);
            }
            sort(obj,obj+n,cmp);
            int ans = 0;
            for(int i = 0;i < n;i++)
            {
                int r = Find(obj[i].d);
                if(r > 0)
                {
                    ans += obj[i].p;
                    pre[r] = r - 1;
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    

     这个题并不算难,主要是提供了另一个思考的方向吧,现在不是出初中高中得应试阶段,每一个类型都有固定得做法,而ACM这种题,就应该去创新的想一想,去应用更多好玩得数据结构,去做更多好玩得事情

  • 相关阅读:
    2015年终总结
    mmzb游戏事故分析
    为sproto手写了一个python parser
    Lua小技巧
    Techparty-广州 10 月 31 日 Docker 专场沙龙 后记
    1password密码库格式更新
    SSL加密与系统时间
    webpack的学习使用三
    webpack的学习使用二
    webpack的学习使用一
  • 原文地址:https://www.cnblogs.com/DF-yimeng/p/8619825.html
Copyright © 2011-2022 走看看