Cod sursa(job #2419775)

Utilizator Bianca00Buzoi Bianca Bianca00 Data 9 mai 2019 13:16:56
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;

vector <int> graph[1000005];
int tata[1000005];
int grad[1000005];

int findfath( int node)
{
    if (tata[node] == node)
        return node;
    int ans=findfath(tata[node]);
    tata[node]=ans;
    return ans;
}
int main()
{

    int n,m, i;
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    f>>n>>m;
    for(i=0;i<n;i++)
    {
        tata[i]=i;
        grad[i]=1;
    }
    for(i=0;i<m;i++)
    {
        int a,x,y;
        f>>a>>x>>y;
        int tx,ty;
        tx=findfath(x);
        ty=findfath(y);
        if (a==1)
        {
        if (tx!=ty)
        {
            if (grad[tx]<grad[ty])
            {
                tata[tx]=ty;
                grad[ty]+=grad[tx];
            }
            else
            {
                tata[ty]=tx;
                grad[tx]+=grad[ty];
            }
        }
        }
        else
        {
            if (tx==ty)
                g<<"DA\n";
            else
                g<<"NU\n";
        }

    }


}