Pagini recente » Cod sursa (job #156068) | Cod sursa (job #2740265) | Cod sursa (job #2338464) | Cod sursa (job #2356500) | Cod sursa (job #2049834)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int P[100010];
int V[100010];
void makeSet(int x)
{
P[x]=x;
V[x]=0;
}
int getPar(int x)
{
if (x!=P[x])
P[x]=getPar(P[x]);
return P[x];
}
void mergeSets(int x,int y)
{
if (getPar(x)==getPar(y))
return;
int p1,p2;
p1=getPar(x);
p2=getPar(y);
if (V[p1]==V[p2])
{
V[p1]++;
P[y]=p1;
}
else
if (V[p1]>V[p2])
P[y]=p1;
else
P[x]=p2;
}
int main()
{
int n,m;
fin>>n>>m;
for (int i=1;i<=n;i++)
makeSet(i);
int x,y,z;
for (int i=1;i<=m;i++)
{
fin>>x>>y>>z;
if (x==1)
mergeSets(y,z);
else
{
if (getPar(y)==getPar(z))
fout<<"DA\n";
else
fout<<"NU\n";
}
}
return 0;
}