Pagini recente » Cod sursa (job #103465) | Cod sursa (job #2263345) | Cod sursa (job #494480) | Cod sursa (job #2297489) | Cod sursa (job #2629044)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");
/// N este numarul de varfuri
int N;
/// M este numarul de operatiuni
int M;
/// P[i] este parintele varfului i
int P[100001];
/// NRV[i] este egal cu numarul de varfuri din subarborele de radacina i
int NRV[100001];
int stramos(int v)
{
while (P[v]!=0)
v=P[v];
return v;
}
int main()
{
fi>>N;
fi>>M;
for (int i=1;i<=N;i++)
{
P[i]=0;
NRV[i]=1;
}
for (int q=1;q<=M;q++)
{
int tip;
fi>>tip;
if (tip==1)
{
/// reuniune
int x,y;
fi>>x>>y;
int sx,sy;
sx=stramos(x);
sy=stramos(y);
/// din enunt sx!=sy
if (NRV[sx]>=NRV[sy])
{
NRV[sx]+=NRV[sy];
P[sy]=sx;
}
else
{
NRV[sy]+=NRV[sx];
P[sx]=sy;
}
}
else
{
/// interogare
int x,y;
fi>>x>>y;
int sx,sy;
sx=stramos(x);
sy=stramos(y);
if (sx==sy)
fo<<"DA\n";
else
fo<<"NU\n";
}
}
fi.close();
fo.close();
return 0;
}