Cod sursa(job #372575)

Utilizator dead_knightTitei Paul Adrian dead_knight Data 10 decembrie 2009 20:18:04
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<fstream>
using namespace std;
int n,m,t[100004],nrc,h[100004];
int rad(int x)
{
    int y,tmp;
    y=x;
    while(t[x])
        x=t[x];
    while(y!=x)
    {
        tmp=y;
        y=t[y];
        t[tmp]=x;
    }
    return x;
}

void reuniune(int x,int y)
{
    int rx=rad(x);
    int ry=rad(y);
    if(rx!=ry)
    {
        nrc--;
        if(h[rx]>h[ry])
            t[ry]=rx;
        else
        {
            if(h[rx]<h[ry])
                t[rx]=ry;
            else
                t[rx]=ry,h[ry]++;
        }
    }
}

int main()
{
    ifstream fin("dfs.in");
    fin>>n>>m;
    nrc=n;
    for( ; m ;m--)
    {
        int i,j;
        fin>>i>>j;
        reuniune(i,j);
    }
    ofstream fout("dfs.out");
    fout<<nrc;
    return 0;
}