acdream 1212(贪心)

题意:有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;}elseprintf(” %d”, i);}printf(“\n”);}return 0;}

寂寞时,想想我的影子,我会在远方给你一个微笑;难过时,

acdream 1212(贪心)

相关文章:

你感兴趣的文章:

标签云: