Skip to content

Commit b2ff643

Browse files
committed
Add task1 exam_06 solutions
1 parent 99984bf commit b2ff643

File tree

3 files changed

+121
-0
lines changed

3 files changed

+121
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from collections import deque
2+
3+
def bfs(starting_vertex, num_traversal, parents, visited, graph):
4+
q = deque([starting_vertex])
5+
6+
while q:
7+
current = q.popleft()
8+
parents[current] = num_traversal
9+
10+
for neighbor in graph[current]:
11+
if neighbor not in visited:
12+
visited.add(neighbor)
13+
q.append(neighbor)
14+
15+
16+
def count_areas(V, graph):
17+
parents = [v for v in range(V + 1)]
18+
num_traversal = 0
19+
visited = set()
20+
21+
for vertex in graph:
22+
if vertex in visited:
23+
continue
24+
bfs(vertex, num_traversal, parents, visited, graph)
25+
num_traversal += 1
26+
27+
return parents
28+
29+
N, M = map(int, input().split())
30+
graph = {v:set() for v in range(1, N + 1)}
31+
32+
for _ in range(M):
33+
x, y = map(int, input().split())
34+
graph[x].add(y)
35+
graph[y].add(x)
36+
37+
Q = int(input())
38+
queries = (tuple(map(int, input().split())) for _ in range(Q))
39+
40+
parents = count_areas(N, graph)
41+
42+
for x, y in queries:
43+
print(1 if parents[x] == parents[y] else 0, end = ' ')
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import sys
2+
sys.setrecursionlimit(1_000_000)
3+
4+
def dfs(current, num_traversal, parents, visited, graph):
5+
parents[current] = num_traversal
6+
7+
for neighbor in graph[current]:
8+
if neighbor not in visited:
9+
visited.add(neighbor)
10+
dfs(neighbor, num_traversal, parents, visited, graph)
11+
12+
def count_areas(V, graph):
13+
parents = [v for v in range(V + 1)]
14+
num_traversal = 0
15+
visited = set()
16+
17+
for vertex in graph:
18+
if vertex in visited:
19+
continue
20+
dfs(vertex, num_traversal, parents, visited, graph)
21+
num_traversal += 1
22+
23+
return parents
24+
25+
N, M = map(int, input().split())
26+
graph = {v:set() for v in range(1, N + 1)}
27+
28+
for _ in range(M):
29+
x, y = map(int, input().split())
30+
graph[x].add(y)
31+
graph[y].add(x)
32+
33+
Q = int(input())
34+
queries = (tuple(map(int, input().split())) for _ in range(Q))
35+
36+
parents = count_areas(N, graph)
37+
38+
for x, y in queries:
39+
print(1 if parents[x] == parents[y] else 0, end = ' ')
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import sys
2+
sys.setrecursionlimit(1_000_000)
3+
4+
def find(x, parents):
5+
if parents[x] == x:
6+
return x
7+
8+
furthest_parent = find(parents[x], parents)
9+
parents[x] = furthest_parent
10+
11+
return furthest_parent
12+
13+
def union(x, y, parents, rank):
14+
x_root = find(x, parents)
15+
y_root = find(y, parents)
16+
17+
parents[x_root] = y_root
18+
19+
N, M = map(int, input().split())
20+
edges = [map(int, input().split()) for _ in range(M)]
21+
22+
Q = int(input())
23+
queries = (tuple(map(int, input().split())) for _ in range(Q))
24+
25+
def solve(V, edges, queries):
26+
rank = [0] * (V + 1)
27+
parents = [v for v in range(V + 1)]
28+
29+
for x, y in edges:
30+
union(x, y, parents, rank)
31+
32+
for x, y in queries:
33+
is_connected = find(x, parents) == find(y, parents)
34+
35+
print(1 if is_connected else 0, end = ' ')
36+
37+
38+
solve(N, edges, queries)
39+

0 commit comments

Comments
 (0)