Cod sursa(job #2507420)

Utilizator Anca.ioanaMuscalagiu Anca Ioana Anca.ioana Data 10 decembrie 2019 11:12:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int Tata[100001], Rang[100001];
int n, m;
 int Gaseste_Radacina(int x)
{ int R,y;
 R=x;
    while(Tata[R]!=R)
    { R=Tata[R];
    }
//Compresia Drumurilor
    while(Tata[x]!=x)
    { y=Tata[x];
     Tata[x]=R;
     x=y;
    }
    return R;
}
 inline void Uneste_arbori(int x, int y)
{ if(Rang[x]>=Rang[y])
    Tata[y]=x;
  else Tata[x]=y;
  if(Rang[x]==Rang[y]) Rang[x]++;
}
 int main()
{int i,op,x,y;
f>>n>>m;
for(i=1;i<=n;i++)
 { Tata[i]=i;
    Rang[i]=1;
 }

for(i=1;i<=m;i++)
{ f>>op>>x>>y;
    if(op==1)
    { int R1, R2;
    R1=Gaseste_Radacina(x); R2=Gaseste_Radacina(y);
    if(R1!=R2)
        Uneste_arbori(R1, R2);
    }
    else { if(Gaseste_Radacina(x)==Gaseste_Radacina(y))
             g<<"DA"<<'\n';
           else g<<"NU"<<'\n';
        }
}

f.close();
g.close();
    return 0;
}