Pagini recente » Cod sursa (job #2216772) | Cod sursa (job #2503676) | Cod sursa (job #2758549) | Cod sursa (job #1454927) | Cod sursa (job #2287790)
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int tt[100001],rang[100001],n,m;
int multime(int x)
{
int y,R=x;
while(tt[R]!=R) R=tt[R];
while(tt[x]!=x)
{
y=tt[x];
tt[x]=R;
x=y;
}
return R;
}
void uniune(int x,int y)
{
if(rang[x]>rang[y]) tt[y]=x;
else tt[x]=y;
if(rang[x]==rang[y]) rang[y]++;
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++)
{
rang[i]=1;
tt[i]=i;
}
for(int i=1;i<=m;i++)
{
int x,y,c;
f>>c>>x>>y;
if(c==1) uniune(multime(x),multime(y));
else
{
if(multime(x)!=multime(y)) g<<"NU"<<'\n';
else g<<"DA"<<'\n';
}
}
return 0;
}