Pagini recente » Cod sursa (job #2429222) | Cod sursa (job #1914477) | Cod sursa (job #1114046) | Cod sursa (job #1447986) | Cod sursa (job #1542463)
#include <iostream>
#include<fstream>
using namespace std;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");
int root[100002],rang[100002];
int find(int a)
{
int t,i,x;
for(t=a;t!=root[t];t=root[t])
for(i=a;i!=t;)
{x=root[i];
root[i]=t;
i=x;
}
return i;
}
void unite(int a,int b)
{
int ta=find(a),tb=find(b);
if(ta!=tb)
if(rang[ta]<rang[tb])
root[ta]=tb;
else if(rang[ta]>rang[tb])
root[tb]=ta;
else{root[ta]=tb;rang[tb]++;}
}
int main()
{int n,m,a,b,ob;
fi>>n>>m;
for(int i=1;i<=m;i++)
{
fi>>ob;
if(ob==1)
{
fi>>a>>b;
unite(a,b);
}
if(ob==2)
{
fi>>a>>b;
if(find(a)==find(b))
fo<<"DA"<<'\n';
else fo<<"NU"<<'\n';
}
}
return 0;
}