Pagini recente » Cod sursa (job #1732007) | Cod sursa (job #1662175) | Cod sursa (job #2574547) | Cod sursa (job #2548261) | Cod sursa (job #2617647)
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int sz[100001],par[100001],n,m,aux;
void op1(int x, int y)
{
int x2 = x;
while(x2 != par[x2])
x2 = par[x2];
int y2 = y;
while(y2 != par[y2])
y2 = par[y2];
if(sz[x2] < sz[y2])
{
swap(x,y);
swap(x2,y2);
}
sz[x2] += sz[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;
}
}
void op2(int x, int y)
{
int x2=x;
while(x2 != par[x2])
x2 = par[x2];
int y2 = y;
while(y2 != par[y2])
y2 = par[y2];
while(x!=x2)
{
int aux = par[x];
par[x]=x2;
x=aux;
}
while(y!=y2)
{
aux = par[y];
par[y]=y2;
y=aux;
}
if(x2==y2)
g<<"DA"<<"\n";
else
g<<"NU"<<"\n";
}
int main()
{
f>>n>>m;
int op;
int x,y;
for(int i=1;i<=n;i++)
{
sz[i]=1;
par[i]=i;
}
for(int i=1;i<=m;i++)
{
f>>op>>x>>y;
if(op==1)
{
op1(x,y);
}
else
{
op2(x,y);
}
}
}