Pagini recente » Cod sursa (job #533603) | Cod sursa (job #1312611) | Cod sursa (job #1088312) | Cod sursa (job #2304158) | Cod sursa (job #2511813)
#include <iostream>
#include <fstream>
#define N 100001
#define M 100001
using namespace std;
int parent[N];
int rang[N];
void comp_roads(int nod, int root)
{
while(parent[nod] != -1)
{
parent[nod] = root;
nod = parent[nod];
}
}
int get_root(int nod)
{
int par = parent[nod];
if(par == -1)
return nod;
while(parent[par] != -1)
{
par = parent[par];
}
comp_roads(nod, par);
return par;
}
int main()
{
int n,m;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
parent[i] = -1;
rang[i] = 1;
}
while(m)
{
int x, y, op;
fin >> op >> x >> y;
int root1, root2;
if(op == 1)
{
root1 = get_root(x);
root2 = get_root(y);
if(rang[root1] >= rang[root2])
{
parent[root2] = root1;
}
else
{
parent[root1] = root2;
}
if(rang[x] == rang[y])
rang[x] ++;
}
else
{
if(get_root(x) == get_root(y))
fout << "DA" << endl;
else
fout << "NU" << endl;
}
m--;
}
return 0;
}