Cod sursa(job #1075593)

Utilizator anaid96Nasue Diana anaid96 Data 9 ianuarie 2014 11:24:03
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<stdio.h>
#include<utility>
#include<algorithm>

#define x first
#define y second
#define Nmax 101
#define Mmax (Nmax-1)/2

using namespace std;

FILE *in,*out;
pair<int,int> G[Mmax];
int C[Nmax];

void descompune();
void afisare();
int n,m;
int minim,maxim;
int main(void)
{
	in=fopen("conexe.in","rt");
	out=fopen("conexe.out","wt");
	fscanf(in,"%d%d",&n,&m);
	for(int i=0;i<m;i++)
		fscanf(in,"%d%d",&G[i].x,&G[i].y);
	descompune();
	afisare();
	fclose(in);
	fclose(out);
	return 0;
}	

void descompune()
{
	for(int i=1;i<=n;i++)
		C[i]=i;
	for(int i=0;i<m;i++)
	{
		if(G[i].x!=G[i].y)
		{
			minim=min(C[G[i].x],C[G[i].y]);
			maxim=max(C[G[i].x],C[G[i].y]);
			for(int j=1;j<=n;j++)
				if(C[j]==maxim)
					C[j]=minim;
		}	
	}	
}	

void afisare()
{
	int nrc=0;
	for(int i=1;i<=n;i++)
		if(C[i])
		{
			nrc++;
			for(int j=i+1;j<=n;j++)
				if(C[j]==C[i])
					C[j]=0;
		}	
	fprintf(out,"%d",nrc);	
}