小A参加了一个n人的活动,每个人都有一个唯一编号i(i>=0 & i<n),其中m对相互认识,在活动中两个人可以通过互相都认识的一个人介绍认识。现在问活动结束后,小A最多会认识多少人?
小A参加了一个n人的活动,每个人都有一个唯一编号i(i>=0 & i<n),其中m对相互认识,在活动中两个人可以通过互相都认识的一个人介绍认识。现在问活动结束后,小A最多会认识多少人?
第一行聚会的人数:n(n>=3 & n<10000);
第二行小A的编号: ai(ai >= 0 & ai < n);
第三互相认识的数目: m(m>=1 & m
< n(n-1)/2);
第4到m+3行为互相认识的对,以','分割的编号。
输出小A最多会新认识的多少人?
7 5 6 1,0 3,1 4,1 5,3 6,1 6,5
3
class Node(object): def __init__(self, v): self.v = v self.neighbors = [] def solve(graph, target): counter = 0 n = len(graph) visited = [False for _ in range(n)] stack = [target] visited[target] = True while stack: v = stack.pop() for i in graph[v].neighbors: if not visited[i]: visited[i] = True counter += 1 stack.append(i) return counter while True: try: num_person = int(input().strip()) target = int(input().strip()) graph = [Node(i) for i in range(num_person)] num_edge = int(input().strip()) for _ in range(num_edge): li = input().strip().split(',') i, j = [int(_) for _ in li] graph[i].neighbors.append(j) graph[j].neighbors.append(i) ans = 0 nei_num = len(graph[target].neighbors) if nei_num: ans = solve(graph, target) - nei_num print(ans) except Exception as e: #print(e) break
from collections import deque # 双向队列,速度比list更快一些 n = int(input()) ai = int(input()) m = int(input()) # 用整型而不是字符串,能省一点是一点 relationships = {} # 用dict来模拟链表 for i in range(n): relationships[i] = [] for _ in range(m): member1, member2 = list(map(int, input().split(','))) relationships[member1].append(member2) relationships[member2].append(member1) # 双向关系 visited = [False]*n # 列表记录成员是否被访问过 visited[ai] = True for member in relationships[ai]: visited[member] = True queue = deque(relationships[ai]) count = 0 while queue: node = queue.popleft() for node_next in relationships[node]: if not visited[node_next]: queue.append(node_next) visited[node_next] = True count += 1 print(count)
dict
存储图的边信息,每个key
对应一个list
visited
标记是否访问过。 #deque pop(0)速度要更快一点 from collections import deque N = int(input()) cur_id = int(input()) M = int(input()) graph_link_dict = {} for i in range(N): graph_link_dict[i] = [] for _ in range(M): node1,node2 = list(map(int,input().split(','))) graph_link_dict[node1].append(node2) graph_link_dict[node2].append(node1) visited = [False]*N new_set = set() queue = deque() for node in graph_link_dict[cur_id]: queue.append(node) #BFS while queue: node = queue.popleft() if visited[node]: continue for to_node in graph_link_dict[node]: if to_node != cur_id: queue.append(to_node) visited[node] = True new_set.add(node) print(len(new_set)-len(graph_link_dict[cur_id]))
n,a,m = map(int, (input(),input(),input())) c = dict([i,[]] for i in range(n)) for i in range(m): x,y = map(int,input().split(',')) c[x].append(y) c[y].append(x) o = set(c[a]) p = set() def f(x): if x not in p: t = len(p) p.add(x) if len(p) != t: for i in c[x]: f(i) f(a) print(len(p)-1-len(o))