Pagini recente » Cod sursa (job #1498709) | Cod sursa (job #48295) | Cod sursa (job #1803897) | Cod sursa (job #379174) | Cod sursa (job #1641560)
#include <bits/stdc++.h>
#define Nmax 100010
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,t,h[Nmax],M[Nmax],x,y;
int Find(int x)
{
int R=x,aux;
while(M[R]!=R)
R=M[R];
for(; M[x]!=x;)
{
aux=M[x];
M[x]=R;
x=aux;
}
return R;
}
void Union(int x,int y)
{if(h[x]>h[y])
M[y]=x;
else
M[x]=y;
if(h[x]==h[y])
h[x]++;
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
{
h[i]=i;
M[i]=i;
}
for(int i=1; i<=m; i++)
{
f>>t>>x>>y;
if(t==1)
Union(Find(x),Find(y));
else
if(Find(x)==Find(y))
g<<"DA"<<'\n';
else
g<<"NU"<<'\n';
}
return 0;
}