Cod sursa(job #2125362)

Utilizator titusuTitus C titusu Data 8 februarie 2018 13:32:56
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<fstream>
#include<iostream>
#include<vector>

using namespace std;

ifstream fin("dfs.in");
ofstream fout("dfs.out");

int n, m;
vector<int> T, Rang;

int Radacina(int k)
{
	if(T[k] == 0)
		return k;
	else
	{
		int x = Radacina(T[k]);
		T[k] = x;
		return x;
	}
}



int main()
{
    fin >> n >> m;
	Rang = T = vector<int> (n + 1 , 0);
    int i ,j;

    while(fin >> i >> j)
    {
		int ri = Radacina(i), rj = Radacina(j);
		if(ri != rj)
		{
			if(Rang[ri] > Rang[rj])
				T[rj] = ri;
			else
			{
				T[ri] = rj;
				if(Rang[ri] == Rang[rj])
					Rang[rj] ++;
			}
		}
	}
	int nrc = 0;
	for(auto x : T)
		if(x == 0)
			nrc ++;
	
	fout << nrc - 1;
	
    fin.close();
    fout.close();
    return 0;

}