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。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = + ;
int fa[maxn];
int vis[maxn], ans[maxn]; int main()
{
int T, n;
while (scanf("%d", &T) != EOF)
{
while (T--)
{
scanf("%d", &n);
for (int i = ; i <= n; i++)
scanf("%d", &fa[i]); // 编号为 i 的点的父亲
memset(vis, , sizeof(vis));
int cnt = ;
for (int i = n; i >= ; i--)
{
if (!vis[i] && !vis[fa[i]])
{
vis[i] = vis[fa[i]] = ;
ans[cnt++] = i;
}
}
printf("%d\n", cnt * );
for (int i = cnt-; i >= ; i--)
{
if (i == cnt-)
printf("%d", ans[i]);
else
printf(" %d", ans[i]);
}
puts("");
}
}
return ;
}
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. Or ...
- ZOJ Monthly, January 2018 训练部分解题报告
A是水题,此处略去题解 B - PreSuffix ZOJ - 3995 (fail树+LCA) 给定多个字符串,每次询问查询两个字符串的一个后缀,该后缀必须是所有字符串中某个字符串的前缀,问该后缀最 ...
- ZOJ 1093 Monkey and Banana (LIS)解题报告
ZOJ 1093 Monkey and Banana (LIS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- zoj 2313 Chinese Girls' Amusement 解题报告
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1313 题目意思:有 N 个人(编号依次为1~N)围成一个圆圈,要求求 ...
- 【LeetCode】120. Triangle 解题报告(Python)
[LeetCode]120. Triangle 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址htt ...
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
随机推荐
- atom 隐藏右边的白线
atom-text-editor.editor .wrap-guide {//隐藏右边的白线visibility: hidden;}
- 【Todo】Tomcat与Jetty的比较 以及Tomcat架构的学习
主要参考这篇文章: http://blog.csdn.net/qing_2012/article/details/8276789 然后Tomcat原理的介绍,可以看这篇文章: http://www.i ...
- JFinal学习 & Gradle配置续 & Tomcat配置
接上一篇对Gradle的学习,再用JFinal项目再建一个. 参考了这篇文章:https://my.oschina.net/u/1010578/blog/390094 但是其中没有代码,所以看了这篇 ...
- mysql主从一致问题
https://www.cnblogs.com/gomysql/p/3662264.html
- requests(爬虫常用)库的使用
Requests库的使用 基于urllib改写的库 示例: import requests response=requests.get('http://www.baidu.com')#get请求 pr ...
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
[002-Add Two Numbers (单链表表示的两个数相加)] 原题 You are given two linked lists representing two non-negative ...
- Android——滑动事件冲突解决
android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件. android系统中的每个View的子类都具有下面三个与TouchEvent处理密切相关的方法: (1) ...
- 多选checkbox
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mysql 修改表引擎方法
修改表引擎方法 方法1:修改mysql.ini配置文件,重启mysql服务生效 修改my.ini,在[mysqld]下加上default-storage-engine=INNODB 其中红色字体部分是 ...
- c语言知识点总结-------静态区、堆、栈、常量区等
在C语言中地址占4个字节 1.编程语言发展 低级语言----->高级语言 机器语言 ---> 汇编---->高级语言(C语言.C++.JAVA等) 机器语言 :0101 0010 1 ...