Cod sursa(job #261380)

Utilizator raduzerRadu Zernoveanu raduzer Data 18 februarie 2009 10:02:02
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_N 100010

long n, m, sol;
long f[MAX_N];
long grad[MAX_N], *a[MAX_N];

void df(long nod)
{
	long i;
	f[nod] = 1;
	for (i = 0; i < grad[nod]; ++i)
	     if (!f[a[nod][i]])
		df(a[nod][i]);
}

int main()
{
	long x, y, i, j;
	freopen("dfs.in", "r", stdin);
	freopen("dfs.out", "w", stdout);

	scanf("%ld %ld", &n, &m);

	for (i = 1; i <= m; ++i)
	{
		scanf("%ld %ld", &x, &y);
		++grad[x];
		++grad[y];
	}

	fclose(stdin);

	freopen("dfs.in", "r", stdin);

	scanf("%ld %ld", &n, &m);
	for (i = 1; i <= n; ++i)
	{
		if (grad[i] > 0)
			a[i] = new long[grad[i]];
		grad[i] = 0;
	}

	for (i = 1; i <= m; ++i)
	{
		scanf("%ld %ld", &x, &y);
		a[x][grad[x]++] = y;
		a[y][grad[y]++] = x;
	}


	for (i = 1; i <= n; ++i)
	{
		if (!f[i])
		{
			++sol;
			df(i);
		}
	}

	printf("%ld\n", sol);
	return 0;
}