Cod sursa(job #2147999)

Utilizator Viktor10012001Traistaru Andrei Victor Viktor10012001 Data 1 martie 2018 14:04:57
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>

using namespace std;
int t[100000],h[100000];
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int FindSet(int x)
{
    while(x!=t[x])
             x=t[x];
    return x;
}
void UnionSet(int x,int y)
{
    if(h[x]==h[y])
       {
           t[y]=x;
            h[x]++;
       }
    else
        if(h[x]>h[y])
               t[y]=x;
         else
               t[y]=y;
}
int main()
{
    int i,j,n,m,u,v,x;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        t[i]=i;
        h[i]=1;
    }
    for(i=1;i<=m;i++)
    {
        fin>>x>>u>>v;
        if(x==1)
        {
            if(t[u]!=t[v])
                  UnionSet(t[u],t[v]);
        }
         else
             if(FindSet(t[u])==FindSet(t[v]))
                    fout<<"DA\n";
               else
                      fout<<"NU\n";
    }
    return 0;
}