Cod sursa(job #1527632)

Utilizator kassay_akosKassay Akos kassay_akos Data 18 noiembrie 2015 15:07:05
Problema Parcurgere DFS - componente conexe Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
//****************************************
//      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;
}