Cod sursa(job #591475)

Utilizator deneoAdrian Craciun deneo Data 24 mai 2011 12:50:57
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<cstdio>
#include<vector>
#include<deque>
using namespace std;

vector<int> g[100002];
deque<int> d;
int n, m;
bool parc[100002];

int avanseaza(int poz) {
	int i;
	for(i = poz; i <= n && parc[i]; ++i);
	return i;
}

void dfs(int s) {
	int k, i;
	d.push_back(s);
	parc[s] = 1;
	while(!d.empty()) {
		k = d[0];
		for(i = 0; i < g[k].size(); ++i)
			if(!parc[g[k][i]]) {
				parc[g[k][i]] = 1;
				d.push_back(g[k][i]);
			}
		d.pop_front();
	}
}

int main() { 
	int i, x, y, pasi = 0, poz = 1;
	
	freopen("dfs.in", "r", stdin);
	freopen("dfs.out", "w", stdout);
	scanf("%d%d", &n, &m);
	for(i = 1; i <= m; ++i) {
		scanf("%d%d", &x, &y);
		g[x].push_back(y);
		g[y].push_back(x);
	}
	
	while(1) {
		poz = avanseaza(poz);
		if(poz > n) break;
		++pasi;
		dfs(poz);
	}
	
	printf("%d\n", pasi);
	return 0;
}