#include #include /** * 28-Z1-4 * Ondra Hlavatý */ using namespace std; struct vertex { size_t comp; // Číslo komponenty vector neigh; // Seznam sousedů } vert [1000]; /** * Rekurzivně projde sousedy vrcholu v a označí je */ void mark(vertex& v, size_t c) { v.comp = c; for (size_t u : v.neigh) if (vert[u].comp != c) mark(vert[u], c); } int main() { size_t n, m; cin >> n >> m; // U všech vrcholů si číslo komponenty nastavíme na nula for (size_t i = 0; i < n; i++) vert[i].comp = 0; for (size_t i = 0; i < m; i++) { size_t a, b; cin >> a >> b; a--; b--; // Indexujeme raději od nuly vert[a].neigh.push_back(b); vert[b].neigh.push_back(a); } size_t comps = 0; for (size_t i = 0; i < n; i++) { if (vert[i].comp != 0) continue; comps++; mark(vert[i], comps); } cout << comps << endl; return 0; }