• ZOJ 2315


    ---恢复内容开始---

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1315

    这个题目比较难以看懂,我也是看网上的题目意思才看懂的,大题意思就是关于钱的分配;

    一个公司只有一个老板,到了年终的时候,要分钱,分钱有三种限制(老板不可以分红)

    一、每个员工可以让的下属拿奖金,可以等待拿自己上司给自己的奖金。也可以什么都不做。

    二、每个员工只可以自己拿钱或者给下属分钱,只能选择一样

    三、每个员工只能给自己的一个下属分钱;

    案例的输入的意思就是

    1

    4

    1 1 2

    第一行代表案例数,第二行代表有公司一共有几个人,第三行就是这个员工是属于那一个人管理的,比如说1代表着老板,第3个的2就代表着它是第二个人,也就是现在的所排序的第一个人管理的

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 
     5 int p[500100];       //记录谁是你的上司
     6 bool vis[500100];    //记录是否你分钱了
     7 int ans[500100];    //记录分钱了的人的位置
     8 
     9 int main()
    10 {
    11     int n,i,sum,t;
    12     scanf("%d",&t);
    13     while(t)
    14     {
    15         scanf("%d",&n);
    16         for(i=2;i<=n;i++)    //输入每一个人的直系上司是谁
    17             scanf("%d",&p[i]);
    18         sum=0;
    19         memset(vis,false,sizeof(vis));   //进行初始化,每一个人都还没有进行分钱
    20         for(i=n;i>1;i--)
    21         {
    22             if(!vis[i]&&!vis[p[i]])     //代表这个人没有分到钱,以及他的上司和他上司的其他部下都没有分到钱
    23             {
    24                 vis[i]=true;
    25                 vis[p[i]]=true;
    26                 ans[sum++]=i;      //记录这个人的位置
    27             }
    28         }
    29         printf("%d
    ",sum*1000);
    30         for(i=sum-1;i>=0;i--)
    31         {
    32             if(i==sum-1) printf("%d",ans[i]);
    33             else printf(" %d",ans[i]);
    34         }
    35         printf("
    ");
    36         t--;
    37     }
    38     return 0;
    39 }

    ---恢复内容结束---

  • 相关阅读:
    picturebox 图片自适应
    C#中如何生成矢量图
    测试ODBC与OLE
    ODBC具体使用
    C#中的OLEDB连接2
    C#中的ODBC、OLEDB连接
    c#执行并行任务之Parallel与TaskFactory
    C# 4.0 新特性之并行运算(Parallel)
    app的下载中心
    第三方库列表
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/5361115.html
Copyright © 2020-2023  润新知