Pagini recente » Cod sursa (job #247495) | Cod sursa (job #618871) | Cod sursa (job #1225838) | Cod sursa (job #1041050) | Cod sursa (job #1540804)
#include<iostream>
#include<fstream>
using namespace std;
#define dim 100001
ifstream in("disjoint.in");
ofstream out("disjoint.out");
struct nod
{
nod *next;
int val;
};
nod *v[dim];
int tata[dim];
int n,m;
void init()
{
int i;
for(i=1; i<=n; ++i)
{
tata[i] = i;
v[i] = new nod;
v[i]->val = i;
v[i]->next = NULL;
}
}
void join(int a, int b) // introduc lista lui b in lista lui a
{
nod *j, *temp;
j = v[b];
while(j != NULL)
{
temp = new nod;
temp->next = v[a];
temp->val = j->val;
v[a] = temp;
tata[j->val] = a;
j = j->next;
}
v[b] = NULL; /// Curat ultimul element
}
void afis()
{
int i;
nod *p;
for(i=1; i<=n; ++i)
{
p = v[i];
cout<<"Arbore "<<i<<" _"<<tata[i]<<"_ ";
while(p)
{
cout<<p->val<<" ";
p = p->next;
}
cout<<"\n";
}
cout<<"\n";
}
int main()
{
int caz,i,a,b;
nod *p;
in>>n>>m;
// Init
init();
// Solve
for(i=1; i<=m; ++i)
{
in>>caz>>a>>b;
if(caz==1)
{
if(tata[a] != tata[b])
{
join(a, b);
//afis();
}
}
else if(caz == 2)
{
if(tata[a] == tata[b]) out<<"DA\n";
else out<<"NU\n";
}
}
return 0;
}