Cod sursa(job #2447522)

Utilizator Andy_ANDYSlatinaru Andrei Alexandru Andy_ANDY Data 13 august 2019 15:36:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f ( "disjoint.in" ); ofstream g ( "disjoint.out" );
int n,m,tata[200005],rang[200005];
int reprezentant(int x)
{   if(tata[x]==x) return x;
    int a=reprezentant(tata[x]);
    tata[x]=a;
    return a;
}
void reuniune(int a,int b)
{   int repa=reprezentant(a),repb=reprezentant(b);
    if(rang[repa]>rang[repb]) tata[repb]=repa;
    else tata[repa]=repb;
}
int main()
{   f>>n>>m;
    for(int i=1;i<=n;i++)
    {   tata[i]=i;
        rang[i]=1;
    }
    while(m--)
    {   int tip,x,y;
        f>>tip>>x>>y;
        if(tip==1) reuniune(x,y);
        else
        {   if(reprezentant(x)==reprezentant(y)) g<< "DA\n";
            else g<< "NU\n";
        }
    }
    return 0;
}