Pagini recente » Cod sursa (job #2018290) | Cod sursa (job #1257019) | Cod sursa (job #937846) | Cod sursa (job #159466) | Cod sursa (job #2079053)
#include <stdio.h>
using namespace std;
FILE* fin;
FILE* fout;
int n, m, cod, x, y;
int tati[100001];
int height[100001];
void join(int x, int y)
{
int curr_node1 = x;
int curr_node2 = y;
int count1 = 0;
while(tati[curr_node1])
{
curr_node1 = tati[curr_node1];
++count1;
}
int count2 = 0;
while(tati[curr_node2])
{
curr_node2 = tati[curr_node2];
++count2;
}
if(count1 > height[curr_node1])
height[curr_node1] = count1;
if(count2 > height[curr_node2])
height[curr_node2] = count2;
if(height[curr_node1] > height[curr_node2])
tati[curr_node2] = curr_node1;
else tati[curr_node1] = curr_node2;
}
void redoConnections(int x, int tataX)
{
while(x != tataX)
{
int aux = tati[x];
tati[x] = tataX;
x = aux;
}
}
void query(int x, int y)
{
int curr_node1 = x;
int curr_node2 = y;
while(tati[curr_node1])
curr_node1 = tati[curr_node1];
while(tati[curr_node2])
curr_node2 = tati[curr_node2];
if(curr_node1 != curr_node2)
fprintf(fout, "NU\n");
else fprintf(fout, "DA\n");
redoConnections(x, curr_node1);
redoConnections(y, curr_node2);
}
int main()
{
fin = fopen("disjoint.in", "r");
fout = fopen("disjoint.out", "w");
fscanf(fin, "%d %d", &n, &m);
for(int i = 0; i < m; ++i)
{
fscanf(fin, "%d %d %d", &cod, &x, &y);
if(cod == 1)
join(x, y);
else if(cod == 2)
query(x, y);
}
return 0;
}