Cod sursa(job #2359358)

Utilizator PaulRPFRebenciuc Paul-Florin PaulRPF Data 28 februarie 2019 19:54:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <bits/stdc++.h>
#define Nmax 100002
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int M,N,x,y,query,i;
int T[Nmax],Rank[Nmax];

int Root(int k)
{
    if(T[k]==0)return k;
    int r=Root(T[k]);
    T[k]=r;
    return r;
}

void Union(int x,int y)
{
    int rx=Root(x),ry=Root(y);
    if(Rank[rx]>Rank[ry])T[ry]=rx;
    else
    {
        T[rx]=ry;
        if(Rank[rx]==Rank[ry])Rank[ry]++;
    }
}

void Check(int x,int y)
{
    int rx=Root(x),ry=Root(y);
    if(rx==ry)g<<"DA\n";
    else g<<"NU\n";
}
int main()
{
    f>>N>>M;
    for(i=1;i<=M;i++)
    {
        f>>query>>x>>y;
        if(query==1)Union(x,y);
        if(query==2)Check(x,y);
    }
    return 0;
}