Cod sursa(job #2772386)

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

using namespace std;

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

const int MMax=100008;

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;
        //for(int i=1;i<=n;i++)
          //  if(TT[x]==i)
            //    TT[y]=i;
    }
    if(x>=y) {
        TT[x]=y;
        //for(int i=1;i<=n;i++)
          //  if(TT[y]==i)
            //    TT[x]=i;
    }

}

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;
}