Pagini recente » Cod sursa (job #1921287) | Cod sursa (job #312072) | Cod sursa (job #1671756) | Cod sursa (job #812561) | Cod sursa (job #757636)
Cod sursa(job #757636)
#include <fstream>
#define MAX 100050
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int tata[MAX], rang[MAX];
int find(int x)
{
int R, comp;
for(R = x; tata[R] != R; R = tata[R]);
for(; comp != R;)
{
comp = tata[x];
tata[x] = R;
x = comp;
}
return R;
}
void merge(int x, int y)
{
if(rang[x] > rang[y]) tata[y] = x;
else tata[x] = y;
if(rang[x] == rang[y]) rang[y]++;
}
int main()
{
int n, m, op, x, y;
in>>n>>m;
for(int i = 1; i <= n; i++) {tata[i] = i; rang[i] = 1;}
while(m--)
{
in>>op>>x>>y;
switch(op)
{
case 1: merge(find(x), find(y)); break;
case 2: if(find(x) == find(y)) out<<"DA\n"; else out<<"NU\n"; break;
}
}
in.close(); out.close();
return 0;
}