Pagini recente » Cod sursa (job #2821773) | Cod sursa (job #1935) | Cod sursa (job #3219474) | Cod sursa (job #1667138) | Cod sursa (job #989807)
Cod sursa(job #989807)
#include<fstream>
#define dmax 100003
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n, m;
int father[dmax];
int nRank[dmax];
void join(int a, int b)
{
while(father[a] != -1)
a = father[a];
while(father[b] != -1)
b = father[b];
if(nRank[a] > nRank[b])
{
father[b] = a;
}
else if(nRank[b] > nRank[a])
{
father[a] = b;
}
else
{
father[b] = a;
nRank[a] ++;
}
}
void query(int a, int b)
{
while(father[a] != -1)
a = father[a];
while(father[b] != -1)
b = father[b];
if(a == b)
{
out<<"DA\n";
}
else out<<"NU\n";
}
int main()
{
in>>n>>m;
for(int i=1; i<=n; i++)
{
nRank[i] = 1;
father[i] = -1;
}
for(int i=1; i<=m; i++)
{
int op, a, b;
in>>op>>a>>b;
if(op == 1)
join(a, b);
else query(a, b);
}
in.close();
out.close();
return 0;
}