CF 115A Party
来源:互联网 发布:ps淘宝详情页模板 编辑:程序博客网 时间:2024/05/17 23:40
题目连接:http://codeforces.com/contest/115/problem/A
A company has n employees numbered from 1 to n. Each employee either has no immediate manager or exactly one immediate manager, who is another employee with a different number. An employee A is said to be the superior of another employee B if at least one of the following is true:
- Employee A is the immediate manager of employee B
- Employee B has an immediate manager employee C such that employee A is the superior of employee C.
The company will not have a managerial cycle. That is, there will not exist an employee who is the superior of his/her own immediate manager.
Today the company is going to arrange a party. This involves dividing all n employees into several groups: every employee must belong to exactly one group. Furthermore, within any single group, there must not be two employees A and B such that A is the superior of B.
What is the minimum number of groups that must be formed?
The first line contains integer n (1 ≤ n ≤ 2000) — the number of employees.
The next n lines contain the integers pi (1 ≤ pi ≤ n or pi = -1). Every pi denotes the immediate manager for the i-th employee. If pi is -1, that means that the i-th employee does not have an immediate manager.
It is guaranteed, that no employee will be the immediate manager of him/herself (pi ≠ i). Also, there will be no managerial cycles.
Print a single integer denoting the minimum number of groups that will be formed in the party.
5-1121-1
3
For the first example, three groups are sufficient, for example:
- Employee 1
- Employees 2 and 4
- Employees 3 and 5
题目描述:给出n个人的上下级关系,-1表示这个人没有上级,输入的第i个数为j表示i的直接上级是j。这里对上级的定义不仅是直接上级还有间接上级,也就是说满足传递性,A是B的上级,B是C的上级,那么A是C的上级。现在要求把这些人放到集合中,同一集合中不存在集合上下级关系,最少需要多少个集合。
题目分析:将-1的点作为树根,可以构造出森林,从树根遍历每棵树的深度,最大深度就是最后的结果,简单的DFS即可完成。
#include<cstdio>#include<iostream>#include<vector>#include<cstring>using namespace std;int maxx,deep;vector<int>g[2005];int vis[2005],a[2005];void dfs(int x){ for(int i=0;i<g[x].size();i++) { int u=g[x][i]; if(!vis[u]) { vis[u]=1; deep++; dfs(u); if(deep>maxx) maxx=deep; deep--; } }}int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); if(a[i]==-1) continue; g[a[i]].push_back(i); } maxx=1;deep=1; memset(vis,0,sizeof vis); for(int i=1;i<=n;i++) { if(a[i]==-1&&!vis[i]) { vis[i]=1; dfs(i); } } cout<<maxx<<endl;}
- CF 115A Party
- Codeforces 115A- Party
- codeforces-115A-Party
- Codeforces 115A Party
- CodeForces 115A Party
- Codeforces 115A. Party
- codefoeces 115A Party
- codeforces 115A Party dfs
- Codeforces 115A Party 题解
- A. Party
- 【CF 125C】 Hobbits' Party
- Codeforces 115A- Party(DFS)
- CF#808 C. Tea Party(贪心)
- CodeForces 115A Party(并查集)
- 文章标题 codeforces 115A:Party ( 并查集)
- CodeForces 115A Party 求树的高度
- lightoj 1316 - A Wedding Party
- CF 2A Winner
- 关于Linux的几个问题
- lua之select用法
- 基础数据结构-二叉树-赫夫曼树的解码(详解)
- hdu 1148
- Android开发中的事件分发机制梳理
- CF 115A Party
- 训练11-HTML 为多个元素使用CSS类定义样式
- 如何利用GitHub进行团队开发
- Android添加联系人信息并读取
- Ajax(二)
- ajax前台js代码实现
- java之二叉树的创建和递归遍历
- ubuntu server版安装图形界面,以及图形界面和命令行的相互切换
- 蓝桥杯第六届 让我怎能过大年(dfs)