Cod sursa(job #2424250)

Utilizator andra_racovitaRacovita Andra-Georgiana andra_racovita Data 22 mai 2019 20:18:02
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#include <bits/stdc++.h>

using namespace std;

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

int N, M;
int cost_total;
vector< pair<int, pair<int,int> > > G(100005);
vector<int> tati(100005);
vector<int> rang(100005);

int find(int nod) ///returnez tatal nodului nod
{
    if(nod==tati[nod])
        return nod;
    tati[nod]=find(tati[nod]);
    return tati[nod];
}

void Uniune(int x, int y)
{
    x=find(x);
    y=find(y);
    ///Unesc subarborele cu inaltimea mai mica la cel mai mare

    if(rang[x]>rang[y])
       {
            rang[x]+=rang[y];
            tati[y]=x;
       }
    else
    {
        tati[x]=y;
        rang[y]+=rang[x];
    }

    /*if(rang[x]==rang[y])
        rang[y]++;  */
}

int main()
{
    fin>>N>>M;
    /*G.resize(M+1);
    tati.resize(N+1);   */
    for(int i=1;i<=N;i++)
        tati[i]=i;
    //rang.resize(N+1,1);
    //afis.resize(N);
    for(int i=1;i<=M;i++)
    {
        int c,x,y;
        fin>>c>>x>>y;
        if(c==1)
            Uniune(x,y);
        else
        {
            if(find(x)==find(y))
                fout<<"DA"<<endl;
            else
                fout<<"NU"<<endl;
        }
    }
}