Pagini recente » Cod sursa (job #1122240) | Cod sursa (job #1751127) | Cod sursa (job #2329579) | Cod sursa (job #2115726) | Cod sursa (job #699930)
Cod sursa(job #699930)
#include <fstream>
#include <vector>
using namespace std;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");
int sir[100001],rang[100001],k=0;
void combina(int x , int y) {
if(rang[sir[x]]>rang[sir[y]])
sir[y]=sir[x];
else if(rang[sir[x]]<rang[sir[y]])
sir[x]=sir[y];
else {
rang[sir[x]]++;
sir[sir[y]]=sir[x];
}
}
void cauta(int x , int y) {
k++;
int i = x , j = y;
while(sir[i]!=i)
i=sir[i];
while(sir[j]!=j)
j=sir[j];
if(i==j)
fo<<"DA\n";
else fo<<"NU\n";
int go;
go=i;
i=x;
while(sir[i]!=go) {
int aux=i;
i=sir[i];
sir[aux]=go;
}
go=j;
i=y;
while(sir[i]!=go) {
int aux=i;
i=sir[i];
sir[aux]=go;
}
}
int main() {
int n , m;
fi>>n>>m;
for(int i=1; i<=n; i++)
sir[i]=i;
for(int i=0; i<m; i++) {
int tip , x , y;
fi>>tip>>x>>y;
switch(tip) {
case 1:
combina(x,y);
continue;
case 2:
cauta(x,y);
}
}
}