题目描述:
思路:连通图问题,比如第一个人和第二个人会第一种语言,第二个人和第三个人会第二种语言,第二个人会两种语言,那么第一三两个人也能同时交流,要创建一三连通的关系,那么创建person_lan用于存放构建n个人会的语言,lan_person用于存放用于存放m种语言,哪些人会,遍历person_lan中的每个人,然后遍历每种语言对应的人,然后采用bfs的方法创建lan_person中每个人的连通。
代码:
n, m, k = 3, 3, 2
v = [[2, 3], [3, 1]]
person_lan = [[] for _ in range(n+1)]
lan_person = [[] for _ in range(m+1)]
for i in v:
person_lan[i[0]].append(i[1])
lan_person[i[1]].append(i[0])
flag = [False for i in range(n+1)]
res = 0
for i in range(1, n+1):
if flag[i] == False:
res += 1
q = []
q.append(i)
flag[i] = True
while q:
cur = q.pop(-1)
for j in range(len(person_lan[cur])):
for n in range(len(lan_person[person_lan[cur][j]])):
if flag[lan_person[person_lan[cur][j]][n]] == False:
q.append(lan_person[person_lan[cur][j]][n])
flag[lan_person[person_lan[cur][j]][n]] == True
if k == 0:
print(res)
else:
print(res-1)