Pagini recente » Cod sursa (job #1200739) | Cod sursa (job #3187831) | Cod sursa (job #3207813) | Cod sursa (job #22184) | Cod sursa (job #1333248)
#include<fstream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,tata[100010],i,adnc[100010],m,c,a,b;
int grupa(int x)
{
int y,cx=x;
while(x!=tata[x])
x=tata[x];
while(x!=tata[cx])
{
y=tata[cx];
tata[cx]=x;
cx=y;
}
return x;
}
void unire(int x,int y)
{
if(adnc[x]>adnc[y])
tata[y]=x;
else
tata[x]=y;
if(adnc[x]==adnc[y])
adnc[y]++;
}
int main()
{
f>>n>>m;
for(i=1;i<=n;i++)
{
tata[i]=i;
}
for(i=1;i<=m;i++)
{
f>>c>>a>>b;
if(c==1)
{
unire(grupa(a),grupa(b));
}
else
{
if(grupa(a)==grupa(b))
g<<"DA"<<'\n';
else
g<<"NU"<<'\n';
}
}
return 0;
}