Pagini recente » Cod sursa (job #1077113) | Cod sursa (job #3196456) | Cod sursa (job #2963028) | Cod sursa (job #2755649) | Cod sursa (job #1802114)
#include <fstream>
#include <stack>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m, v[100010], op, x, y;
stack<int> q;
void grup(int a, int b)
{
while(v[a] != 0)
{
q.push(a);
a = v[a];
}
while(!q.empty())
{
v[q.top()] = a;
q.pop();
}
while(v[b]!=0) {
q.push(b);
b=v[b];
}
while(!q.empty())
{
v[q.top()] = a;
q.pop();
}
v[a] = b;
}
void query(int a, int b)
{
while(v[a]!=0)
{
q.push(a);
a = v[a];
}
while(!q.empty())
{
v[q.top()] = a;
q.pop();
}
while(v[b] != 0)
{
q.push(b);
b = v[b];
}
while(!q.empty())
{
v[q.top()] = b;
q.pop();
}
if(a == b)fout << "DA\n";
else fout << "NU\n";
}
int main()
{
fin >> n >> m;
while(m--)
{
fin >> op >> x >> y;
switch(op)
{
case 1: grup(x,y);break;
case 2: query(x,y);break;
}
}
return 0;
}