Cod sursa(job #1394883)

Utilizator iacovladNot Available iacovlad Data 20 martie 2015 19:54:58
Problema Paduri de multimi disjuncte Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
using namespace std;

int sp[100],contor[100];

int find(int x)
{
    if(sp[x]==x)
        return x;
    else
    {
        int bla=find(sp[x]);
        if(sp[x]!=bla)
            contor[bla]++;
        return bla;
    }
}

void unire(int x,int y)
{
    int tx=find(x),ty=find(y);
    if(contor[tx]>contor[ty])
        sp[ty]=tx;
    else
        sp[tx]=ty;
}

int main()
{
    int n,m,i,x,y;
    ifstream f("disjoint.in");
    f>>n>>m;
    for(i=1;i<=n;i++)
        sp[i]=i;
    ofstream g("disjoint.out");
    for(i=0;i<m;i++)
    {
        f>>x;
        if(x==1)
        {
            f>>x>>y;
            unire(x,y);
        }
        else
        {
            f>>x>>y;
            if(find(x)==find(y))
                g<<"DA\n";
            else
                g<<"NU\n";
        }
    }
    return 0;
}