Pagini recente » Cod sursa (job #182874) | Cod sursa (job #2826079) | Cod sursa (job #3294064) | Cod sursa (job #1616680) | Cod sursa (job #1776263)
#include "fstream"
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX = 100005;
int N, M;
int parent[NMAX];
void merge(int x, int y)
{
int rankX = 0, rankY = 0;
int ancestorX = x, ancestorY = y;
while(parent[ancestorX])
{
ancestorX = parent[ancestorX];
rankX++;
}
while(parent[ancestorY])
{
ancestorY = parent[ancestorY];
rankY++;
}
if(rankX < rankY)
{
parent[ancestorX] = ancestorY;
}
else
{
parent[ancestorY] = ancestorX;
}
}
bool sameAncestor(int x, int y)
{
int ancestorX = x, ancestorY = y;
while(parent[ancestorX])
{
ancestorX = parent[ancestorX];
}
while(parent[ancestorY])
{
ancestorY = parent[ancestorY];
}
if(ancestorX == ancestorY) return true;
else return false;
}
int main()
{
int N, M;
fin >> N >> M;
for(int i = 1 ; i <= M ; i++)
{
int type, x, y;
fin >> type >> x >> y;
if(type == 1)
{
merge(x, y);
}
else
{
if(sameAncestor(x, y))
{
fout << "DA" << "\n";
}
else
{
fout << "NU" << "\n";
}
}
}
return 0;
}