码迷,mamicode.com
首页 > 其他好文 > 详细

acdream 1212(贪心)

时间:2015-05-07 20:33:11      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

题意:有n个人,从1到n,编号越大职位越低,然后给出了第2到第n个人的上司的编号,每个人可以有一堆小弟但只能有一个上司。年底发奖金,每个人可以从上司那得到1000元或发给某个小弟1000元,问所有人能发的奖金和最大是多少,那些人得到了奖金。
题解:直接倒着遍历一遍,把人和他的上司标记掉算作一组,看有几组。

#include <stdio.h>
#include <string.h>
const int N = 500005;
int pa[N], n, flag[N];
int main() {
    while (scanf("%d", &n) == 1) {
        for (int i = 0; i <= n; i++)
            flag[i] = 0;
        for (int i = 2; i <= n; i++)
            scanf("%d", &pa[i]);
        int res = 0;
        for (int i = n; i >= 2; i--) {
            if (!flag[i] && !flag[pa[i]]) {
                flag[i] = 2;
                flag[pa[i]] = 1;
                res++;
            }
        }
        printf("%d\n", res * 1000);
        int temp = 0;
        for (int i = 2; i <= n; i++)
            if (flag[i] == 2) {
                if (!temp) {
                    printf("%d", i);
                    temp = 1;
                }
                else
                    printf(" %d", i);
            }
        printf("\n");
    }
    return 0;
}

acdream 1212(贪心)

标签:

原文地址:http://blog.csdn.net/hyczms/article/details/45565049

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!