Cod sursa(job #2169976)

Utilizator dragosmdvMoldovan Dragos dragosmdv Data 14 martie 2018 20:11:40
Problema Paduri de multimi disjuncte Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int v[100000], n, m, k, a, b;

int find(int x)
{
    if(v[x]<0)
        return x;
    else
        return find(v[x]);
}
void union_(int a, int b)
{
    int parenta=find(a);
    int parentb=find(b);
    if(v[parenta]<v[parentb])
    {
        v[parenta]=parentb;
    }
    else if(v[parenta]>v[parentb])
    {
        v[parentb]=parenta;
    }
    else if(v[parenta]==v[parentb])
    {
        v[parenta]=parentb;
        v[parentb]--;
    }
}

int main()
{
   fin>>n>>m;
   for(int i=1;i<=n;i++)
   v[i]=-1;
   for(int i=1;i<=m;i++)
   {
       fin>>k>>a>>b;
       if(k==1)
       {
        union_(a,b);
       }
       else
       {
        if(find(a)==find(b))
            fout<<"DA"<<'\n';
        else fout<<"NU"<<'\n';
       }
   }

    return 0;
}