帮派弟位

问题描述

小明在游戏中参加了一个帮派,这一天他突然想知道自己在帮派中是什么地位,但是帮派的查询系统突然坏了,目前只能知道每个人的附属关系,请问你能帮帮他重建关系网并找出他的地位 吗? 给定一个正整数n,代表该帮派的总人数,并且小明的序号是m 给出这n个人中每个人的附属关系,确保给出的关系网为一棵树。帮派地位的定义是按照自己手下有多少帮众决定的,注意手下的手下也算是自己的手下。如果手下的帮众相同则按序号较小的在前面。你能帮助小明找到自己的帮派地位吗?

输入格式

第一行,两个正整数n(1<n<10^5)和m(1<=m<=n)代表该帮派的总人数以及小明的序号 接下来n-1行,每行两个正整数,格式如下: L r(1<L,r <n),代表序号为的L人附属于序号为r的人。

输出格式

一行,包含1个正整数,输出按手下人数多少排序后小明的排名。

Mycode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
n,m=map(int,input().split())
li=[]
person=[[] for i in range(n+1)]
person_num=[]
for i in range(n-1):
l,r=map(int,input().split())
li.append((l,r))
li.sort(key=lambda x:x[1])
for i in range(n-1):
a=li[i]#(2, 1)
person[a[1]].append(a[0])
for i in range(n,0,-1):
if len(person[i])!=0:
for j in person[i]:#[2, 3]
person[i]=list(set(person[i]+person[j]))
for i in range(1,n+1):
a,b=i,len(person[i])
person_num.append((a,b))
person_num.sort(key=lambda x:x[1],reverse=True)
for i in person_num:
if i[0]==m:
print(person_num.index(i)+1)

帮派弟位
https://ianwusb.blog/2024/04/08/帮派弟位/
作者
Ianwusb
发布于
2024年4月8日
许可协议