Cod sursa(job #3194167)

Utilizator Stefan_ModolaStefan Modola Stefan_Modola Data 17 ianuarie 2024 10:36:29
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int NMAX=100001;
vector <int> G[NMAX];
int n,m,viz[NMAX],T[NMAX],rang[NMAX];

void read(){
    f>>n>>m;

}
int Find(int nod){
    if(nod!=T[nod]){
        int r=Find(T[nod]);
        T[nod]=r;
        return r;
    }
    return nod;
}
void Union(int x,int y){
    if(rang[x]<rang[y]){
        T[x]=y;
    }   else if(rang[x]>rang[y]){
            T[y]=x;
    }   else{
        T[x]=y;
        rang[y]++;
    }
}
int main()
{
   read();
   for(int i=1;i<=n;i++){
    T[i]=i;
   }
   for(int i=1;i<=m;i++){
        int cod,x,y;
        f>>cod>>x>>y;

        int rx=Find(x);
        int ry=Find(y);
        if(cod==1){
            Union(rx,ry);
        }   else if(rx==ry){
            g<<"DA"<<'\n';
        }   else g<<"NU"<<'\n';

        }

    return 0;
}