Cod sursa(job #2408816)

Utilizator BovisioNitica Ionut Bogdan Bovisio Data 18 aprilie 2019 13:04:30
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

//vector <int> tata;
int tata[100001];
int grad[100001];

int n,m;

int find_father(int node)
{
    if(tata[node] == node)
        return node;
    tata[node] = find_father(tata[node]);
    return tata[node];
}

void Read()
{
    int cod,x,y;
    //FILE* f=fopen("disjoint.in","r");
    //FILE* g=fopen("disjoint.out","w");
    //fscanf(f,"%d %d",&n,&m);
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");

    f >> n >> m;

    for(int i=1;i<=n;i++)
    {
        tata[i] = i;
        grad[i] = 1;
    }

    for(int i=1;i<=m;i++)
    {
        f >> cod >> x >> y;
        if(cod == 1)
        {
            //Adaug in multime
            if(find_father(x) != find_father(y))
            {
                if(grad[x] < grad[y])
                {
                    tata[x] = tata[y];
                    grad[y] += grad[x];
                }
                else
                {
                    tata[y] = tata[x];
                    grad[x] += grad[y];
                }
            }
        }
        else
        {
            //Verific daca sunt in aceiasi componenta
            if(find_father(x) == find_father(y))
                //printf("DA\n");
                g << "DA" << endl;
            else
                //printf("NU\n");
                g << "NU" << endl;

        }
    }
}

int main()
{
    Read();
    return 0;
}