Pagini recente » Arhiva de probleme | Cod sursa (job #8743) | Cod sursa (job #526084) | Cod sursa (job #2836633) | Cod sursa (job #1755320)
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n,m,rang[100003],p[100003],tip;
void Union(int x,int y);
int Head(int);
void Reunion(int x, int y)
{
Union(Head(x),Head(y));
}
void Union(int x, int y)
{
if(rang[x]>rang[y])
p[y] = x;
else
p[x] = y;
if(rang[x] == rang[y])
rang[y]++;
}
int Head(int x)
{
if (x != p[x])
p[x] = Head(p[x]);
return p[x];
}
int main()
{
in >> n >> m;
int x,y;
for(int i = 1 ; i<= n ; i++)
p[i] = i, rang[i] = 0;
while(m--)
{
in >> tip >> x >> y;
switch(tip)
{
case 1: Reunion(x,y); break;
case 2: if(Head(x) == Head(y)) out<<"DA\n"; else out <<"NU\n";
}
}
}