Pagini recente » Cod sursa (job #3239950) | Cod sursa (job #1588290) | Cod sursa (job #2517351) | Cod sursa (job #3004767) | Cod sursa (job #2372219)
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,v[100003],ad[100003],c,x,y;
int Find(int a)
{
int p=a,q;
while(v[p]!=p)p=v[p];
while(v[x]!=x)
{
q=v[x];
v[x]=p;
x=q;
}
return p;
}
void unite(int a,int b)
{
if(ad[a]>ad[b])
v[b]=a;
else v[a]=b;
if(ad[a]==ad[b])ad[b]++;
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;++i)v[i]=i,ad[i]=1;
for(int i=1;i<=m;++i)
{
f>>c>>x>>y;
if(c==1)
{
unite(Find(x),Find(y));
}
else
{
if(Find(x)==Find(y))g<<"DA";
else g<<"NU";
g<<'\n';
}
}
return 0;
}