fork download
  1. n, m = [int(_) for _ in input().split()]
  2. susedia = [ [] for _ in range(n) ] #zoznam susedov pre kazdy vrchol
  3. for _ in range(m):
  4. #spracovanie jednej hrany
  5. x, y = [int(_)-1 for _ in input().split()] #ocislujeme od nuly
  6. # print(x, y)
  7. #pridame susedov k obom vrcholom
  8. susedia[x].append(y)
  9. susedia[y].append(x)
  10. print(*susedia)
  11.  
  12. komponenty = [ -1 for _ in range(n) ] #pole s cislami komponentu pre kazdy vrchol
  13. pocet_komponentov = 0
  14.  
  15. def komponent(v): #vrati zoznam vrcholov v komponente obsahujucom vrchol v
  16. global komponenty
  17. global pocet_komponentov
  18. pocet_komponentov = pocet_komponentov+1
  19. komponenty[v] = pocet_komponentov
  20. zostava = [v] #vrcholy, ktore treba spracovat
  21. while len(zostava) > 0:
  22. i = zostava[0] #vyberieme jeden vrchol
  23. zostava = zostava[1:]
  24. #prejdeme vsetkych susedov vrchola i a pridame, ak este nie su
  25. for j in susedia[i]: #j=sused vrchola i
  26. if komponenty[j] == -1:
  27. zostava.append(j) #pridame k zoznamu vrcholov, kt.este treba spracovat
  28. komponenty[j] = pocet_komponentov #patri do toho isteho komponentu
  29.  
  30. for i in range(n):
  31. if komponenty[i] == -1:
  32. komponent(i)
  33. print(pocet_komponentov)
  34. print(komponenty)
  35.  
Success #stdin #stdout 0.02s 27656KB
stdin
4 2
1 2
2 4

14 14
1 2
2 6
2 7
3 5
4 5
4 6
6 7
7 8
8 9
8 10
11 12
11 13
12 14
13 14
stdout
[1] [0, 3] [] [1]
2
[1, 1, 2, 1]