Advertisement
serega1112

Condensation

Feb 22nd, 2022
753
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.93 KB | None | 0 0
  1. from collections import defaultdict
  2.  
  3. n, m = map(int, input().split())
  4. g = defaultdict(list)
  5. for i in range(m):
  6.     a, b = map(int, input().split())
  7.     g[a].append(b)
  8.  
  9.  
  10. topsort = []
  11.  
  12. visited_ts = set()
  13.  
  14. def dfs_ts(node):
  15.     if not node in visited_ts:
  16.         visited_ts.add(node)
  17.         for neigh in g[node]:
  18.             dfs_ts(neigh)
  19.         topsort.append(node)
  20.  
  21.  
  22. for v in range(1, n+1):
  23.     if v not in visited_ts:
  24.         dfs_ts(v)
  25.  
  26. g_rev = defaultdict(list)
  27.  
  28. for v, neighbors in g.items():
  29.     for neigh in neighbors:
  30.         g_rev[neigh].append(v)
  31.  
  32. count = 0
  33. res = []
  34.  
  35. visited = [0] * (n + 1)
  36.  
  37. def dfs(node, comp):
  38.     if not visited[node]:
  39.         visited[node] = comp
  40.         for neigh in g_rev[node]:
  41.             dfs(neigh, comp)
  42.  
  43. for v in reversed(topsort):
  44.     if not visited[v]:
  45.         count += 1
  46.         dfs(v, count)
  47.  
  48. print(count)
  49. print(' '.join([str(comp) for comp in visited[1:]]))
  50.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement