Pagini recente » Cod sursa (job #1514612) | Cod sursa (job #2444042) | Cod sursa (job #1158115) | Cod sursa (job #364581) | Cod sursa (job #2948581)
//Complexitate: O(n*m)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int inaltime[100001],tata[100001];
void initVectori(int n){
for(int i=0; i<n;i++){
tata[i]=i;
inaltime[i]=0;
}
}
int Find(int u)
{
if(tata[u]==u)
return u;
return Find(tata[u]);
}
void Union(int u, int v)
{
int r1=Find(u);
int r2=Find(v);
if(inaltime[r1] > inaltime[r2])
{
tata[r2] = r1;
inaltime[r1]++;
return;
}
if(inaltime[r2] > inaltime[r1])
{
tata[r1] = r2;
inaltime[r2]++;
return;
}
tata[r2] = r1;
inaltime[r1]++;
}
int main()
{
int n,m;
fin>>n>>m;
initVectori(n);
for(int i=0;i<m;i++)
{
int cod,x,y;
fin>>cod>>x>>y;
if(cod == 1)
Union(x,y);
if(cod == 2)
{
if(Find(x) == Find(y))
fout<<"DA\n";
else fout<<"NU\n";
}
}
return 0;
}