zoukankan      html  css  js  c++  java
  • 找父节点和子节点个数(Poj1634)

    题目链接:http://poj.org/problem?id=1634

    思路:按照工资从小到大排好,找到最近的那个身高较高的人。

    有一点要注意的是,这里有个根节点,大boss,他的id是0,因此,我这里的num初始化为1,到时候减去1就是了,但是对于大boss就不一样了,减1就是0咯。

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    
    const int maxn = 30005;
    
    struct Staff {
        int id,salary,h;
    }staff[maxn];
    
    int n,m;
    int ind[1000000];
    int num[maxn];
    int fa[maxn];
    
    bool cmp(struct Staff a,struct Staff b)
    {
        return a.salary<b.salary;
    }
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            memset(fa,0,sizeof(fa));
            for(int i=1;i<maxn;i++)
                num[i] = 1;
    
            scanf("%d%d",&n,&m);
            for(int i=1;i<=n;i++)
                scanf("%d%d%d",&staff[i].id,&staff[i].salary,&staff[i].h);
            sort(staff+1,staff+n+1,cmp);
    
            for(int i=1;i<=n;i++)
            {
                ind[staff[i].id]=i;
                for(int j=i+1;j<=n;j++)
                {
                    if(staff[j].h>=staff[i].h)
                    {
                        fa[i]=j;
                        num[j]+=num[i];
                        break;
                    }
                }
            }
            for(int i=1;i<=m;i++)
            {
                int id;
                scanf("%d",&id);
                int u=ind[id];
                printf("%d %d
    ",staff[fa[u]].id,num[u]-1);
            }
        }
        return 0;
    }
  • 相关阅读:
    动态规划练习 7
    面试经验交流感悟
    反转链表
    动态规划练习 6
    动态规划练习 4
    动态规划练习 9
    动态规划练习 12
    动态规划练习 8
    动态规划练习 13
    动态规划练习 11
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5611762.html
Copyright © 2011-2022 走看看