Pagini recente » Cod sursa (job #1255981) | Autentificare | Cod sursa (job #1640116) | Cod sursa (job #2266831) | Cod sursa (job #2553513)
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,rang[100001],tati[100001];
int find(int nod)
{
while(nod!=tati[nod])
nod=tati[nod];
return nod;
}
void Union(int x,int y)
{
if(rang[x]<rang[y])
tati[x]=y;
if(rang[y]<rang[x])
tati[y]=x;
if(rang[x]==rang[y])
{
tati[x]=y;
rang[y]++;
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++)
{
tati[i]=i;
rang[i]=1;
}
for(int i=1;i<=m;i++)
{
int op,x,y;
f>>op>>x>>y;
if(op==1)
{
int a=find(x);
int b=find(y);
if(a!=b)
Union(a,b);
}
if(op==2)
{
int a=find(x);
int b=find(y);
if(a!=b)
g<<"NU"<<'\n';
else g<<"DA"<<'\n';
}
}
return 0;
}