Pagini recente » Rating carjan radu (nobody92) | Cod sursa (job #2870038) | Cod sursa (job #937618) | Cod sursa (job #2945846) | Cod sursa (job #2289497)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f1("disjoint.in");
ofstream f2("disjoint.out");
int tati[100005], rang[100005];
int n,m;
int find(int x){
int R, y;
for(R = x; R!=tati[R]; R = tati[R]);
while(tati[x]!=x){
y=tati[x];
tati[x]=R;
x=y;
}
return R;
}
void unite (int x, int y){
if(rang[x]>rang[y])
tati[y]=x;
else
tati[x]=y;
if(rang[x]==rang[y])
rang[y]++;
}
int main() {
int operatie, x,y,radx,rady;
f1>>n>>m;
for(int i=1;i<=n;i++)
{
tati[i]=i;
rang[i]=1;
}
for(int i=0; i<m;i++){
f1>>operatie>>x>>y;
if(operatie == 1)
unite(find(x), find(y));
if(operatie == 2){
if(tati[find(x)]==tati[find(y)])
f2<<"DA"<<endl;
else
f2<<"NU"<<endl;
}
}
return 0;
}