Miałem problem, napisałem DFS(nie wiem czy dobrze), i chciałem zliczyć ilość spójnych składowych grafu. Na razie napisałem tylko takie coś gdzie: n to liczba węzłów, m to liczba krawędzi,
a to numer jednego węzła, b to numer drugiego z którym a jest połączony. Jak miasta drogą.
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
vector <int> s[100007];
bool vis[100007];
int n,m,a,b,wynik=0;
void DFS(int x)
{
vis[x]=true;
for(int i=0;i<(int)s[x].size();i++){
int u=s[x][i];
if(!vis[u]){
DFS[u];
}
}
}
int main()
{
cin >> n >> m;
for(int i=0;i<m;i++){
cin >> a >> b;
s[a].push_back(b);
s[b].push_back(a);
}
for(int i=1;i<=n;i++){
if(!vis[i]){
DFS[i];
wynik ++;
}
}
cout << wynik;
return 0;
}