Pagini recente » Cod sursa (job #1123430) | Cod sursa (job #2595164) | Cod sursa (job #2530947) | Cod sursa (job #839571) | Cod sursa (job #1527632)
//****************************************
// Componente conexe
//****************************************
#include <iostream>
#include <fstream>
#include <stack>
#include <string.h>
#include <vector>
using namespace std;
const int nmax = 100003;
int n,m;
char visited[nmax];
vector<int> v[nmax];
int dfs(){
memset(visited,-1,n+1);
int ck = 0, done = 1;;
stack<int> s;
s.push(1);
//visited[1] = ch ;
while (done <= n ) {
visited[done] = ++ck ;
while (!s.empty()) {
int ind = s.top();
s.pop();
for (unsigned int i = 0; i< v[ind].size(); i++) {
if (visited[v[ind][i]] == -1) {
s.push(v[ind][i]);
visited[v[ind][i]] = ck;
}
}
}
for(; done <= n && visited[done]!= -1;done++) ;
}
return ck-1;
}
int main()
{
freopen("dfs.in","r",stdin);
freopen("dfs.out","w",stdout);
scanf("%d %d", &n, &m);
int x,y;
for(int i = 0; i<m; i++) {
scanf("%d %d", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
}
int ck = dfs();
printf("%d",ck);
fclose(stdin);
fclose(stdout);
return 0;
}