Cod sursa(job #2713564)

Utilizator victorzarzuZarzu Victor victorzarzu Data 28 februarie 2021 11:34:14
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>
 
using namespace std;
int n,m,cerinta,x,y;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int TT[100001],RG[100001];
 
int found(int x)
{
    if(TT[x] == x)
      return x;
    TT[x] = found(TT[x]);
}
 
void unite(int x,int y)
{
    if(RG[x] > RG[y])
        TT[y] = x;
    else TT[x] = y;
 
    if(RG[x] == RG[y]) ++RG[y];
}
 
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;++i)
    {
        TT[i] = i;
        RG[i] = 1;
    }
    for(int i=1;i<=m;++i)
    {
        f>>cerinta>>x>>y;
        if(cerinta==2)
        {
            if(found(x)==found(y))
                g<<"DA"<<'\n';
            else g<<"NU"<<'\n';
        }
        else
        {
            if(found(x)==found(y))
                continue;
            unite(found(x),found(y));
        }
    }
    return 0;
}