Pagini recente » Cod sursa (job #3031167) | Cod sursa (job #229368) | Cod sursa (job #546295) | Cod sursa (job #329773) | Cod sursa (job #2457634)
#include <fstream>
using namespace std;
ifstream f("disjoint.in"); ofstream g("disjoint.out");
int tata[200005], dist[200005];
int rad(int x)
{ if (tata[x] == x) return x;
return (rad(tata[x]));
}
void unire(int x, int y)
{ if (dist[x] < dist[y]) tata[x] = tata[y];
else tata[y] = tata[x];
if (dist[x] == dist[y]) dist[y]++;
}
int main()
{ int n, m, k, i, x, y;
f >> n >> m;
for (i = 1; i <= n; i++)
{ tata[i] = i;
dist[i] = 1;
}
for (i = 0; i < m; i++)
{ f >> k >> x >> y;
if (k == 1) unire(rad(x), rad(y));
else if (rad(x) == rad(y))g << "DA" << '\n';
else g << "NU" << '\n';
}
return 0;
}