Pagini recente » Cod sursa (job #3150411) | Cod sursa (job #331286) | Cod sursa (job #308447) | Cod sursa (job #1568593) | Cod sursa (job #825101)
Cod sursa(job #825101)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int rang[100001], t[100001], x, y, op ,n, m;
int GetRoot(int x)
{
int i;
for ( i = x; i != t[i]; i = t[i]);
while ( x != t[x] )
{
int aux = t[x];
t[x] = i;
x = aux;
}
return i;
}
void Reunite(int x, int y)
{
x == GetRoot(x);
y = GetRoot(y);
if ( x == y )
return;
if ( rang[x] == rang[y] )
rang[y]++;
if ( rang[x] > rang[y] )
t[y] = x;
else t[x] = y;
}
int main()
{
fin >> n >> m;
for ( int i = 1; i <= n; i++ )
{
t[i] = i;
rang[i] = 1;
}
for ( int i = 1; i <= m; i++ )
{
fin >> op >> x >> y;
if ( op == 1 )
Reunite(x,y);
else
{
if ( GetRoot(x) == GetRoot(y) )
{
fout << "DA\n";
}
else fout<< "NU\n";
}
}
fin.close();
fout.close();
return 0;
}