Cod sursa(job #1795026)

Utilizator cyg_denisamariaPop Maria Denisa cyg_denisamaria Data 1 noiembrie 2016 21:54:10
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX=1000;
int t[NMAX+5],h[NMAX+5];
int findset (int u)
{
    while (t[u]!=u)
    u=t[u];
    return u;
}
void unionset (int u,int v)
{
    if (h[u]==h[v])
    {
        t[v]=u;
        h[u]++;
    }
    else
    {
        if (h[u]>h[v])
            t[v]=u;
        else
            t[u]=v;
    }
}
int main()
{
    int n,m,i,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 (findset(u)!=findset(v))
          unionset(u,v);
        }
        else{
            if (findset(u)==findset(v))
                fout<<"DA"<<"\n";
            else
                fout<<"NU"<<"\n";
        }
    }
    fin.close();
    fout.close ();
    return 0;
}