Pagini recente » Cod sursa (job #2098790) | Cod sursa (job #911154) | Cod sursa (job #1364795) | Cod sursa (job #1365140) | Cod sursa (job #2511803)
#include <iostream>
#include <fstream>
#define N 100001
#define M 100001
using namespace std;
int parent[N];
int rang[N];
int get_root(int nod)
{
int par = parent[nod];
if(par == -1)
return nod;
while(parent[par] != -1)
{
par = parent[par];
}
return par;
}
void comp_roads(int nod, int root)
{
while(parent[nod] != -1)
{
parent[nod] = root;
nod = parent[nod];
}
}
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])
{
comp_roads(root2, root1);
parent[root2] = root1;
rang[root2] += rang [root1];
}
else
{
parent[root1] = root2;
rang[root1] += rang [root2];
comp_roads(root1, root2);
}
}
else
{
if(get_root(x) == get_root(y))
fout << "DA" << endl;
else
fout << "NU" << endl;
}
m--;
}
return 0;
}