Pagini recente » Cod sursa (job #1557950) | Cod sursa (job #2690941) | Cod sursa (job #1788157) | Cod sursa (job #2302550) | Cod sursa (job #2697834)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX = 100000;
int v[NMAX + 5], siz[NMAX + 5];
int Find(int x)
{
if(v[x] == x)
return x;
v[x] = Find(v[v[x]]);
return v[x];
}
void Unite(int x, int y)
{
y = Find(y);
x = Find(x);
if(siz[x] > siz[y])
v[x] = y;
else if (siz[y] > siz[x])
v[y] = x;
else
{
v[x] = y;
siz[x]++;
}
}
int main()
{
int n, m;
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
v[i] = i;
siz[i] = 1;
}
for(int i = 0; i < m; i++)
{
int t, x, y;
fin >> t >> x >> y;
if(t == 1)
{
Unite(x, y);
}
else
{
if(Find(x) == Find(y))
fout << "DA\n";
else
fout << "NU\n";
}
}
return 0;
}