Cod sursa(job #2424866)

Utilizator SlaZzeRMaftei Ioan Alexandru SlaZzeR Data 23 mai 2019 22:30:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int tata[200005],grad[200005];
int n, m, op;
int find_father(int node)
{
    if(tata[node] != node)
        tata[node] = find_father(tata[node]);
    return tata[node];
}

int main()
{
    int i, x, y;
   fin >> n >> m;
   for(i = 1; i <= n; i++)
   {
       tata[i] = i;
       grad[i] = 1;
   }
   for(i = 0; i < m; i++)
    {
        fin >> op >> x >> y;
        if(op == 2)
        {
            int fx = find_father(x);
            int fy = find_father(y);
            if(fx == fy)
              fout << "DA\n";
            else fout << "NU\n";
        }
        else
            if(op == 1)
            {
                int fx = find_father(x);
                int fy = find_father(y);

                if(grad[fx] < grad[fy])
                {
                    tata[fx] = fy;
                    grad[fy] += grad[fx];
                }
                else
                    {
                        grad[fx] += grad[fy];
                        tata[fy] = fx;
                    }

            }
    }
    fin.close();
    fout.close();
    return 0;
}