Cod sursa(job #2871978)

Utilizator RK13Barbu Eduard RK13 Data 16 martie 2022 09:40:13
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int tata[100001],d[100001];

int tata_multime(int x)
{if (x!=tata[x]) tata[x]=tata_multime(tata[x]);
return tata[x];

}

void unire(int x, int y)
{x=tata_multime(x);
y=tata_multime(y);
if (d[x]<d[y]) {d[y]+=d[x];
                tata[x]=y;
                 }
    else {d[x]+=d[y];
          tata[y]=x;

         }
}


int main()
{int c,n,m,a,b;
f>>n>>m;
for (int i=1;i<=n;i++) d[i]++,tata[i]=i;
for (int i=1;i<=m;i++) {f>>c>>a>>b;
                        if (c==1) unire(a,b);
                            else {if (tata_multime(a)==tata_multime(b)) g<<"DA"<<'\n';
                                        else g<<"NU"<<'\n';

                                 }
                        }
}