Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <map>
- #include <set>
- #include <unordered_set>
- #include <string>
- class Graph {
- private:
- std::map<int, std::unordered_set<int>> edges;
- std::set<int> used;
- public:
- Graph() {
- }
- void insert(int a, int b) {
- edges[a].insert(b);
- edges[b].insert(a);
- }
- void subgraph2(int a) {
- if (used.find(a) == used.end()) {
- used.insert(a);
- for (auto i : edges[a]) {
- subgraph2(i);
- }
- }
- }
- std::set<int> subgraph(int a) {
- used.clear();
- subgraph2(a);
- return used;
- }
- };
- int main() {
- int N, M;
- int a, b;
- std::cin >> N >> M;
- if (M != 0) {
- Graph graph;
- for (int i = 0; i < M; i++) {
- std::cin >> a >> b;
- graph.insert(a, b);
- }
- std::set<int> result = graph.subgraph(1);
- auto b = result.begin();
- std::cout << result.size() << '\n';
- std::cout << *b++;
- while (b != result.end()) {
- std::cout << " " << *b++;
- }
- } else {
- std::cout << 1 << '\n' << 1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement