Cod sursa(job #2073185)

Utilizator bustyabalazsBustya Balazs bustyabalazs Data 22 noiembrie 2017 19:42:37
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#define NMAX 10000
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int t[NMAX];
int hossz[NMAX];
int root(int pont)
{
    int i=pont;
    while(i!=t[i])
    {
        t[i]=t[t[i]];
        i=t[i];
    }
    return i;
}

void unite(int x1,int x2)
{
    int root1,root2;
    root1=root(x1);
    root2=root(x2);
    if(root1!=root2)
        t[root1]=root2;
    if(root1!=root2)
    {
        if(hossz[root1]>hossz[root2])
        {
            t[root2]=root1;
            hossz[root2]+=hossz[root2];
        }
        else
        {
            t[root1]=root2;
            hossz[root2]+=hossz[root1];
        }
    }
}
void querry(int x1,int x2)
{
    int root1,root2;
    root1=root(x1);
    root2=root(x2);
    if(root1!=root2)
        g<<"NU";
    else
        g<<"DA";
}



int main()
{

    int n,m,muv,x1,x2;
    f>>n>>m;
    for(int i=1;i<=n;++i)
    {
        t[i]=i;
        hossz[i]=1;
    }
    for(int i=0;i<m;++i)
    {
        f>>muv>>x1>>x2;
        if(muv==1)
        {
            unite(x1,x2);
        }
        else
        {
            querry(x1,x2);
            g<<"\n";
        }
    }




    return 0;
}