Pagini recente » Cod sursa (job #504737) | Cod sursa (job #1310016) | Cod sursa (job #3155672) | Cod sursa (job #323859) | Cod sursa (job #3265144)
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m, x, y, par[100001], siz[100001], t;
int root(int p)
{
int aux=p;
while(par[p]!=-1)
{
p=par[p];
}
while(aux!=p)
{
int a=par[aux];
par[aux]=p;
aux=a;
}
return p;
}
void unite(int p, int q)
{
p=root(p);
q=root(q);
if(p==q)
return;
if(siz[p]>siz[q])
{
par[q]=p;
siz[p]=siz[p]+siz[q];
}
else
{
par[p]=q;
siz[q]=siz[p]+siz[q];
}
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
par[i]=-1, siz[i]=1;
for(int i=1; i<=m; i++)
{
f>>t>>x>>y;
if(t==1)
{
unite(x, y);
}
else
{
if(root(x)==root(y))
g<<"DA"<<'\n';
else
g<<"NU"<<'\n';
}
}
return 0;
}