Advertisement
Dzham

Untitled

Apr 15th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <map>
  5. #include <set>
  6. #include <unordered_set>
  7. #include <string>
  8.  
  9. class Graph {
  10. private:
  11. std::map<int, std::unordered_set<int>> edges;
  12. std::set<int> used;
  13.  
  14. public:
  15. Graph() {
  16. }
  17.  
  18. void insert(int a, int b) {
  19. edges[a].insert(b);
  20. edges[b].insert(a);
  21. }
  22.  
  23. void subgraph2(int a) {
  24. if (used.find(a) == used.end()) {
  25. used.insert(a);
  26. for (auto i : edges[a]) {
  27. subgraph2(i);
  28. }
  29. }
  30. }
  31.  
  32. std::set<int> subgraph(int a) {
  33. used.clear();
  34. subgraph2(a);
  35. return used;
  36. }
  37. };
  38.  
  39. int main() {
  40. int N, M;
  41. int a, b;
  42. std::cin >> N >> M;
  43. if (M != 0) {
  44. Graph graph;
  45. for (int i = 0; i < M; i++) {
  46. std::cin >> a >> b;
  47. graph.insert(a, b);
  48. }
  49. std::set<int> result = graph.subgraph(1);
  50. auto b = result.begin();
  51. std::cout << result.size() << '\n';
  52. std::cout << *b++;
  53. while (b != result.end()) {
  54. std::cout << " " << *b++;
  55. }
  56. } else {
  57. std::cout << 1 << '\n' << 1;
  58. }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement