Pagini recente » Cod sursa (job #820447) | Cod sursa (job #1953785) | Cod sursa (job #1317702) | Cod sursa (job #819317) | Cod sursa (job #2491612)
#include <fstream>
#define NMAX 100000
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m, rang[NMAX+10], tata[NMAX+10];
int findSet(int x)
{
int r = x, y = x;
while(tata[r] != r) r = tata[r];
while(tata[x] != x)
{ x = tata[y];
tata[y] = r;
y = x;
}
return r;
}
void unite(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()
{
f >> n >> m;
for(int i=1; i<=n; i++) tata[i] = i;
while(m--)
{ int cer, x, y;
f >> cer >> x >> y;
if(cer == 1) unite(findSet(x), findSet(y));
else
{ if(findSet(x) == findSet(y)) g << "DA" << '\n';
else g << "NU" << '\n';
}
}
return 0;
}