#include #include #include using std::vector; using std::stack; using std::pair; int number_of_components(vector > &adj) { vector visited(adj.size()); stack st; int cc = 0; for (int j = 0; j < adj.size(); j++) { if (visited[j]) continue; cc += 1; st.push(j); while(!st.empty()) { int v = st.top(); st.pop(); visited[v] = true; int s = adj[v].size(); for (int i = 0; i < s; i++) { int w = adj[v][i]; if (!visited[w]) st.push(w); } } } return cc; } int main() { size_t n, m; std::cin >> n >> m; vector > adj(n, vector()); for (size_t i = 0; i < m; i++) { int x, y; std::cin >> x >> y; adj[x - 1].push_back(y - 1); adj[y - 1].push_back(x - 1); } std::cout << number_of_components(adj) << '\n'; }