Cod sursa(job #2304038)
Utilizator | Rosca Rares Raresr14 | Data | 17 decembrie 2018 14:03:39 |
---|---|---|---|
Problema | Paduri de multimi disjuncte | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.76 kb |
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int x,n,p,i,op,y,rx,ry,T[100010];
int rad(int x){
while(T[x]>0)
x=T[x];
return x;
}
int main(){
fin>>n>>p;
for(i=1;i<=n;i++)
T[i]=-1;
for(;p--;){
fin>>op>>x>>y;
rx=rad(x);
ry=rad(y);
if(op==2)
if(rx==ry)
fout<<"DA\n";
else
fout<<"NU\n";
else{
if(rx!=ry){
if(T[rx]<T[ry]){
T[rx]+=T[ry];
T[ry]=rx;
}else{
T[ry]+=T[rx];
T[rx]=ry;
}
}
}
}
return 0;
}