Pagini recente » Cod sursa (job #3261799) | Cod sursa (job #2308729) | Cod sursa (job #2628097) | Cod sursa (job #2512829) | Cod sursa (job #2504677)
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int par[100001],nr[100001],n,m;
//---------------------------------
void uneste(int x, int y)
{
int x2=x;
int y2=y;
while(x2!=par[x2])
x2=par[x2];
while(y2!=par[y2])
y2=par[y2];
if(nr[x2]<nr[y2])
{
swap(x,y);
swap(x2,y2);
}
if(x2!=y2)
{
nr[x2]+=nr[y2];
par[y2]=x2;
}
while(x!=x2)
{
aux=par[x];
par[x]=x2;
x=aux;
}
while(y!=x2)
{
aux=par[y];
par[y]=x2;
y=aux;
}
}
//---------------------------------
int nueadoptat(int x, int y)
{
int x2=x;
int y2=y;
while(x2!=par[x2])
{
x2=par[x2];
}
while(y2!=par[y2])
{
y2=par[y2];
}
if(par[y2]==par[x2])
g<<"DA"<<"\n";
else g<<"NU"<<"\n";
while(x!=x2)
{
aux=par[x];
par[x]=x2;
x=aux;
}
while(y!=y2)
{
aux=par[y];
par[y]=y2;
y=aux;
}
}
//---------------------------------
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
{
par[i]=i;
nr[i]=1;
}
for(int i=0; i<m; i++)
{
int p,x,y;
f>>p>>x>>y;
if(p==1) uneste(x,y);
else nueadoptat(x,y);
}
return 0;
}