Pagini recente » Cod sursa (job #2513626) | Cod sursa (job #2896627) | Cod sursa (job #1303473) | Cod sursa (job #2771637) | Cod sursa (job #2555133)
#include <bits/stdc++.h>
using namespace std;
/************************************************/
const int nmax=100004;
int par[nmax];
int nr[nmax];
int n,m,aux;
/************************************************/
ifstream f("disjoint.in");
ofstream g("disjoint.out");
/************************************************/
///--------------------------------------------------------
inline void readInput()
{
f>>n>>m;
for(int i=1;i<=n;++i)
{
par[i]=i;
nr[i]=1;
}
}
///--------------------------------------------------------
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)
{
int aux=par[x];
par[x]=x2;
x=aux;
}
while(y!=x2)
{
int aux=par[y];
par[y]=x2;
y=aux;
}
}
///--------------------------------------------------------
void Parinte(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[x2]==par[y2])
{
g<<"DA"<<"\n";
}
else
{
g<<"NU"<<"\n";
}
while(x!=x2)
{
int aux=par[x];
par[x]=x2;
x=aux;
}
while(y!=y2)
{
int aux=par[y];
par[y]=y2;
y=aux;
}
}
///--------------------------------------------------------
inline void Solution()
{
for(int i=1;i<=m;i++)
{
int p,x,y;
f>>p>>x>>y;
if(p==1) uneste(x,y);
else Parinte(x,y);
}
}
///--------------------------------------------------------
int main()
{
readInput();
Solution();
return 0;
}