Pagini recente » Cod sursa (job #1909600) | Cod sursa (job #612374) | Cod sursa (job #1555356) | Cod sursa (job #2589431) | Cod sursa (job #2390558)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
const int NMAX = 100001;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int N,M;
int get_root(int x,vector<int>& parinte)
{
if(parinte[x]!=x)
{
x=parinte[x];
return get_root(x,parinte);
}
return x;
}
bool disjoint(int x, int y,vector<int>&parinte)
{
return (get_root(x,parinte)!=get_root(y,parinte));
}
void uneste(int x, int y,vector<int>&rang,vector<int> &comp)
{
int par_x=get_root(x,comp);
int par_y= get_root(y,comp);
if(rang[par_x]<rang[par_y])
comp[par_x]=comp[par_y];
else if(rang[par_x]>rang[par_y])
comp[par_y]=comp[par_x];
else {
comp[par_x] = comp[par_y];
rang[par_y]++;
}
}
void rez()
{
fin>>N>>M;
vector<int> rang(N,0);
vector<int> comp(N);
for(int i=0;i<comp.size();i++)
comp[i]=i;
int op,x,y;
for(int i=0;i<M;i++)
{
fin>>op>>x>>y;
switch(op)
{
case 1:
if(disjoint(x-1,y-1,comp)) uneste(x-1,y-1,rang,comp);
break;
case 2:
if(!disjoint(x-1,y-1,comp)) fout<<"DA\n";
else fout<<"NU\n";
break;
default:
break;
}
}
}
int main() {
rez();
return 0;
}