Pagini recente » Cod sursa (job #2452633) | Cod sursa (job #1590566) | Cod sursa (job #653507) | Cod sursa (job #290892) | Cod sursa (job #2721154)
#include <iostream>
#include <fstream>
#define NMAX 100000
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m, tata[NMAX+10], rang[NMAX+10];
int findDaddy(int x)
{ int r = x, y = x;
while(r != tata[r])
r = tata[r];
while(x != tata[x])
{ y = tata[x];
tata[x] = r;
x = y;
}
return r;
}
void unite(int x, int y)
{ if(rang[x] < rang[y])
tata[x] = y;
else
tata[y] = x;
if(rang[x] == rang[y])
rang[x]++;
}
int main()
{
fin >> n >> m;
for(int i=1; i<=n; i++)
{ tata[i] = i;
rang[i] = 1;
}
for(int i=1; i<=m; i++)
{ int type, x, y;
fin >> type >> x >> y;
int val1 = findDaddy(x), val2 = findDaddy(y);
if(type == 1)
unite(val1, val2);
else
{ if(val1 == val2) fout << "DA" << '\n';
else fout << "NU" << '\n';
}
}
return 0;
}