Pagini recente » Cod sursa (job #801532) | Cod sursa (job #1211220) | Cod sursa (job #1255766) | Rating Andrei Onica (AndreiOnica) | Cod sursa (job #2600502)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream g("disjoint.out");
int f[100005],h[100005];
int father(int nod)
{
int intermediar=nod;
while(intermediar!=f[intermediar])
intermediar=f[intermediar];
while(nod!=f[nod])
{
int initial=f[nod];
f[nod]=intermediar;
nod=initial;
}
return intermediar;
}
void unire(int fx,int fy)
{
if(h[fx]>h[fy])
f[fx]=fy;
if(h[fx]<h[fy])
f[fy]=fx;
else
{
f[fy]=fx;
h[fy]+=1;
}
}
int main()
{
int n,m;
ios::sync_with_stdio(false);
fin.tie(0);
g.tie(0);
fin>>n>>m;
for(int i=1; i<=n; i++)
{
f[i]=i;
h[i]++;
}
for(int i=1; i<=m; i++)
{
int op,x,y;
fin>>op>>x>>y;
if(op==1)
{
int fx=father(x),fy=father(y);
if(fx!=fy)
unire(fx,fy);
}
else
{
if(father(x)==father(y))
g<<"DA\n";
else
g<<"NU\n";
}
}
return 0;
}