Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from collections import defaultdict
- n, m = map(int, input().split())
- g = defaultdict(list)
- for i in range(m):
- a, b = map(int, input().split())
- g[a].append(b)
- topsort = []
- visited_ts = set()
- def dfs_ts(node):
- if not node in visited_ts:
- visited_ts.add(node)
- for neigh in g[node]:
- dfs_ts(neigh)
- topsort.append(node)
- for v in range(1, n+1):
- if v not in visited_ts:
- dfs_ts(v)
- g_rev = defaultdict(list)
- for v, neighbors in g.items():
- for neigh in neighbors:
- g_rev[neigh].append(v)
- count = 0
- res = []
- visited = [0] * (n + 1)
- def dfs(node, comp):
- if not visited[node]:
- visited[node] = comp
- for neigh in g_rev[node]:
- dfs(neigh, comp)
- for v in reversed(topsort):
- if not visited[v]:
- count += 1
- dfs(v, count)
- print(count)
- print(' '.join([str(comp) for comp in visited[1:]]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement