hihoCoder #1947:推断上下级
推断上下级
提交网站:https://hihocoder.com/problemset/problem/1947
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
|
|
描述
H公司包括CEO在内,一共有N名员工,编号1~N,其中CEO的编号是1。除了CEO之外,其他员工都有唯一一名直接上司,形成了一种树形的上下级关系。
现在小Hi知道H公司所有的上下级关系,一共M对。换句话说,只要两名员工A和B之间存在上下级关系(直接或者间接),那么A和B一定在这M对关系之中。
请你帮小Hi推断出每个人的直接上级是谁。
输入
第一行包含两个整数N和M。
以下M行,每行包含两个整数Ai和Bi,代表Ai是Bi的上级。
2 <= N <= 1000
1 <= M <= 499500
输出
输出N行,其中第i行包含一个整数Pi,代表i号员工的上级。(对CEO输出0)
样例输入
3 2
1 2
1 3
样例输出
0
1
1
可以使用并查集去实现,不断更新上级,最后更新的一次上级肯定是直接上级。
代码如下:
#include<stdio.h>
#include<string.h>
main()
{
int n,m;
scanf("%d%d",&n,&m);
int i,j,map[n][2],data[n];
memset(data,0,sizeof(data));
for(i=0;i<m;i++)
{
scanf("%d%d",&map[i][0],&map[i][1]);
}
for(i=0;i<m;i++)
{
if(data[map[i][1]-1]==0)
data[map[i][1]-1]=map[i][0];
else if(data[map[i][1]-1]!=0)
{
int x=map[i][0],y=data[map[i][1]-1],flag=0;
for(j=0;j<m;j++)
{
if(x==map[j][1]&&y==map[j][0])
{flag=1;break;}
}
if(flag)
data[map[i][1]-1]=x;
}
}
for(i=0;i<n;i++)
{
printf("%d\n",data[i]);
}
return 0;
}
登高而望。

浙公网安备 33010602011771号