Cod sursa(job #1441055)

Utilizator petremariaPetre Maria petremaria Data 23 mai 2015 15:41:30
Problema Paduri de multimi disjuncte Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int gasit(int *n, int *m, int x)
{
    int i=x;
    while(n[x]!=0)
        x=n[x];
    if(i!=x)
        n[i]=x;
    return x;
}
void uniune(int *n, int *m,int x, int y)
{
    if(m[x]<m[y])
    {
        n[x]=gasit(n,m,y);
        m[x]++;
    }
    else
    {
        n[y]=gasit(n,m,x);
        m[y]++;
    }
}
int main()
{
    int a,b,c,*n,nn,mm,*m;
    f>>nn>>mm;
    n=new int[nn+1];
    m=new int[nn+1];
    for( int i=1;i<=nn;i++)
        m[i]=n[i]=0;
    for(int i=0; i<mm; i++)
    {
        f>>a>>b>>c;
        if(a==1)
            uniune(n,m,b,c);
        else if(a==2)
        {
            if(gasit(n,m,b)==gasit(n,m,c))
                g<<"DA\n";
            else
                g<<"NU\n";
        }
    }
        return 0;
}