Cod sursa(job #2924285)

Utilizator RaresPoinaruPoinaru-Rares-Aurel RaresPoinaru Data 28 septembrie 2022 20:01:34
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");

const int MAXN=100010;

int n,m;
int tati[MAXN],nrnod[MAXN];

int main()
{
    fin >>n>>m;
    for (int i=1;i<=n;++i){
        tati[i]=i;
        nrnod[i]=1;
    }

    for (int i=1;i<=m;++i){
        int t,x,y;
        fin >>t>>x>>y;
        if (t==1){
            int rx=x,ry=y;
            while (tati[rx]!=rx)
                rx=tati[rx];
            while (tati[ry]!=ry)
                ry=tati[ry];
            int rx2=x,ry2=y;
            while (tati[rx2]!=rx2){
                rx2=tati[rx2];
                tati[rx2]=rx;
            }
            while (tati[ry2]!=ry2){
                ry2=tati[ry2];
                tati[ry2]=ry;
            }
            if (nrnod[rx]>=nrnod[ry])
                tati[ry]=rx;
            else
                tati[rx]=ry;
        }
        else{
            int rx=x,ry=y;
            while (tati[rx]!=rx)
                rx=tati[rx];
            while (tati[ry]!=ry)
                ry=tati[ry];
            if (rx==ry)
                fout <<"DA"<<'\n';
            else
                fout <<"NU"<<'\n';
            int rx2=x,ry2=y;
            while (tati[rx2]!=rx2){
                rx2=tati[rx2];
                tati[rx2]=rx;
            }
            while (tati[ry2]!=ry2){
                ry2=tati[ry2];
                tati[ry2]=ry;
            }
        }
    }
    fin.close ();
    fout.close ();
    return 0;
}