Cod sursa(job #2772390)

Utilizator oana_tosa15Tosa Oana-Miruna oana_tosa15 Data 31 august 2021 22:58:28
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

const int MMax=100000;

int n,m,TT[MMax];

struct muchie{
    int cod,x,y;
}v[MMax];

void read(){
    fin>>n>>m;
    int i;
    for(i=1;i<=m;i++)
        fin>>v[i].cod>>v[i].x>>v[i].y;
}

int Find(int Nod) {
    while(TT[Nod]!=Nod)
        Nod=TT[Nod];
    return Nod;
}

void unire(int x, int y) {
    if(x<y) {
        TT[y]=x;
    }
    if(x>=y) {
        TT[x]=y;
    }

}

void solve() {
    int q,w;
    for(int i=1;i<=m;i++) {
        if(v[i].cod==1) {
            //if(Find(v[i].x) != Find(v[i].y)) {
                unire(Find(v[i].x), Find(v[i].y));
            //}
        } else {
        if(v[i].cod==2)
        {
            q=Find(v[i].x);
            w=Find(v[i].y);
            if(q==w) {
                fout<<"DA"<<'\n';
            }
            else {if(q!=w)
                fout<<"NU"<<'\n';
            }
        }
            }
    }
}
int main()
{
    read();
    for(int i=1;i<=m;i++)
    {
        TT[i]=i;
    }
    solve();
    return 0;
}