Pagini recente » Cod sursa (job #2292662) | Cod sursa (job #2895399) | Cod sursa (job #434284) | Cod sursa (job #3131826) | Cod sursa (job #2405880)
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
//------------------------------
//Variabile globale
int grad[100001],v[100001];
//------------------------------
//Functii
void citire();
void uneste();
void cauta(int,int);
//------------------------------
int main()
{
citire();
return 0;
}
//------------------------------
void cauta(int a,int b)
{
int a2 = a;
while(v[a2] != a2)
a2 = v[a2];
int b2 = b;
while(v[b2] != b2)
b2 = v[b2];
if(a2 == b2)
{
g << "DA" << '\n';
while(a != a2)
{
int a3 = a;
a = v[a];
v[a3] = a2;
}
while(b != a2)
{
int b3 = b;
b = v[b];
v[b3] = a2;
}
}
else
{
g << "NU" << '\n';
while(a != a2)
{
int a3 = a;
a = v[a];
v[a3] = a2;
}
while(b != b2)
{
int b3 = b;
b = v[b];
v[b3] = b2;
}
}
}
//------------------------------
void uneste(int a,int b)
{
int a2 = a;
while(v[a2] != a2)
a2 = v[a2];
int b2 = b;
while(v[b2] != b2)
b2 = v[b2];
if(grad[a2] < grad[b2])
{
swap(a2,b2);
swap(a,b);
}
grad[a2] += grad[b2];
while(a != a2)
{
int a3 = a;
a = v[a];
v[a3] = a2;
}
while(b != b2)
{
int b3 = b;
b = v[b];
v[b3] = a2;
}
v[b2]=a2;
}
//------------------------------
void citire()
{
int n,m;
f >> n >> m;
for(int i = 1; i <= n; ++i)
{
v[i] = i;
grad[i] = 1;
}
while(m--)
{
int c,a,b;
f >> c >> a >> b;
if(c == 1)
uneste(a,b);
else cauta(a,b);
}
}