zoj 2315 New Year Bonus Grant 解题报告

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1315

题目意思:Bill Hates 是公司的老总,她管辖着很多程序员,每个程序员都有各自的上头。现在为了庆祝2013年的到来,要向这些程序员发放新年奖金。不过要遵循一些规则:

1、每个程序员要不把奖金给予她的其中一个下属,要把就等着她的上司发奖金给她。

2、每个程序员不能同时接收奖金和分发奖金。

3、如果程序员要把奖金给予她的下属,她的下属只能是一个,不能是多个。

首先说明一下Simple Input 代表什么意思。

1        ——>   test case

   4        ——>  包括Bill Hates 在内的公司总人数
  1 1 2    ——>   编号为2的人的上司是1(Bill Hates),编号为3的人的上司也是1,编号为4的人上司是2

可以得到这样一幅图。

其实可以将问题抽象成一棵树。

那么题目就变成要我们求出这样的一些点:

(1)儿子和父亲不能同时染色

(2)兄弟中只能有一个点被染色

可以从树的底部开始往上找,如果某个节点被染色,那么它的父亲就不能被染色,所以要用到一个标记数组vis[]。可以发现,实现过程中其实不需要检查兄弟节点是否被染色的。还有一点就是special judge,答案是不唯一的。例如对于5    1 1 2 4 答案可以为 3 5,或者是2 5。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5
 6 const int maxn = 500000 + 5;
 7 int fa[maxn];
 8 int vis[maxn], ans[maxn];
 9
10 int main()
11 {
12     int T, n;
13     while (scanf("%d", &T) != EOF)
14     {
15         while (T--)
16         {
17             scanf("%d", &n);
18             for (int i = 2; i <= n; i++)
19                 scanf("%d", &fa[i]);   // 编号为 i 的点的父亲
20             memset(vis, 0, sizeof(vis));
21             int cnt = 0;
22             for (int i = n; i >= 2; i--)
23             {
24                 if (!vis[i] && !vis[fa[i]])
25                 {
26                     vis[i] = vis[fa[i]] = 1;
27                     ans[cnt++] = i;
28                 }
29              }
30              printf("%d\n", cnt * 1000);
31              for (int i = cnt-1; i >= 0; i--)
32             {
33                 if (i == cnt-1)
34                     printf("%d", ans[i]);
35                 else
36                     printf(" %d", ans[i]);
37             }
38             puts("");
39         }
40     }
41     return 0;
42 }

时间: 2024-10-05 23:09:02

zoj 2315 New Year Bonus Grant 解题报告的相关文章

ZOJ 2315 New Year Bonus Grant

New Year Bonus Grant Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original ID: 231564-bit integer IO format: %lld      Java class name: Main Special Judge All programmers of Mocrosoft software company are organized in

ZOJ 3706 Break Standard Weight 解题报告

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5009 题目意思:给出两个mass:x 和 y,问如何将其中一个 mass 一分为二(当然分完之后它们的和要等于原来的mass,或x 或 y),使得利用这三个mass 可称的数量最大.输出这个最大数量. 网上参考别人用STL中的set来写,太厉害了!!!考虑到set对于重复的元素只存储一个,那么当三个mass组合的过程中有重复的,它都会自动舍弃有重复的,不需要用if来

zoj 2313 Chinese Girls&#39; Amusement 解题报告

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1313 题目意思:有 N 个人(编号依次为1~N)围成一个圆圈,要求求出最大的 K (1 ≤ K ≤ N/2),表示从编号为1的人开始,将球传递给他后一个人数起的第K个人,第K个人又传递给往后数的第K个人......要求这样传递下去,且每个人都有机会接到球.也就是不存在当未使得全部人都接到一次球的情况下,某个人接收到两次以上的球. 详细的解题报告在这里: http:/

ZOJ Monthly, June 2014 解题报告

A.Another Recurrence Sequence B.Gears 题目大意:有n个齿轮,一开始各自为一组,之后进行m次操作,包括以下4种类型: 1.合并两组齿轮,合并的两个应该反向旋转 2.把某个齿轮从所在组删除,自为一组,但不影响同组其它齿轮的状态与关系 3.询问两个齿轮是同向.反向或无关系(即不在同一组) 4.询问某个齿轮所在组的齿轮总数 分析:典型的并查集操作,但是注意两点: 1.由于操作3要询问两个齿轮的相对状态,因此对并查集中每个元素应当保存它的状态信息.状态是相对的,只需要

leetCode解题报告5道题(八)

题目一: Populating Next Right Pointers in Each Node Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } Populate each next pointer to point to its next right node. If there is no next right node, the

【LeetCode】Symmetric Tree 解题报告

Symmetric Tree 解题报告 [LeetCode] https://leetcode.com/problems/symmetric-tree/ Total Accepted: 106639 Total Submissions: 313969 Difficulty: Easy Question Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For

解题报告 之 SOJ2414 Leapin&#39; Lizards

解题报告 之 SOJ2414 Leapin' Lizards Description Your platoon of wandering lizards has entered a strange room in the labyrinth you are exploring. As you are looking around for hidden treasures, one of the rookies steps on an innocent-looking stone and the

解题报告 之 WHU1124 Football Coach

解题报告 之 WHU1124 Football Coach Description It is not an easy job to be a coach of a football team. The season is almost over, only a few matches are left to play. All of sudden the team manager comes to you and tells you bad news: the main sponsor of

解题报告 之 POJ2135 Farm Tour

解题报告 之 POJ2135 Farm Tour Description When FJ's friends visit him on the farm, he likes to show them around. His farm comprises N (1 <= N <= 1000) fields numbered 1..N, the first of which contains his house and the Nth of which contains the big barn.