Pagini recente » Cod sursa (job #2865671) | Cod sursa (job #712559) | Cod sursa (job #163660) | Cod sursa (job #1154867) | Cod sursa (job #757630)
Cod sursa(job #757630)
#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 if(rang[x] < rang[y]) tata[x] = y;
else tata[y] = x;
}
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(x, y); break;
case 2: if(find(x) == find(y)) out<<"DA\n"; else out<<"NU\n"; break;
}
}
in.close(); out.close();
return 0;
}