Pagini recente » Cod sursa (job #3267748) | Cod sursa (job #3292112) | Cod sursa (job #2480716) | Cod sursa (job #655051) | Cod sursa (job #749847)
Cod sursa(job #749847)
#include<iostream>
#include<fstream>
using namespace std;
const int nmax=100001;
int T[nmax],rang[nmax];
void makeset(int x){
T[x]=x;
rang[x]=1;
}
void reuniune(int x,int y){
if(rang[x]>rang[y])
T[y]=x;
else
if(rang[y]>rang[x])
T[x]=y;
else
if(rang[x]==rang[y]){
T[x]=y;
rang[y]++;
}
}
int radacina(int x){
int i,aux;
for(i=x;i!=T[i];i=T[i]);
while(x!=T[x]){
aux=T[x];
T[x]=i;
x=aux;
}
return i;
}
int main(){
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,operatie,x,y;
f>>n>>m;
for(int i=1;i<=n;i++)
makeset(i);
for(int i=1;i<=m;i++){
f>>operatie>>x>>y;
if(operatie==1)
reuniune(radacina(x),radacina(y));
if(operatie==2)
if(radacina(x)==radacina(y))
g<<"DA\n";
else
g<<"NU\n";
}
f.close();
g.close();
return 0;
}