Pagini recente » Cod sursa (job #514121) | Cod sursa (job #211755) | Cod sursa (job #704517) | Cod sursa (job #2677521) | Cod sursa (job #345700)
Cod sursa(job #345700)
#include<fstream>
using namespace std;
const char iname[]="disjoint.in";
const char oname[]="disjoint.out";
const int maxn=100005;
ifstream f(iname);
ofstream g(oname);
int A[maxn],L[maxn],i,n,m,x,y,z;
int anc(int x)
{
int a,y;
for(a=x;a!=A[a];a=A[a]);
for(;A[x]!=x;x=A[x])
{
y=A[x];
A[x]=a;
x=y;
}
return a;
}
void merge(int x,int y)
{
if(L[x]<L[y])
A[x]=y;
else
A[y]=x;
if(L[x]==L[y])
++L[x];
}
int main()
{
f>>n>>m;
for(i=1;i<=n;++i)
A[i]=i,L[i]=1;
for(i=1;i<=m;++i)
{
f>>x>>y>>z;
if(x==2)
if(anc(y)==anc(z))
g<<"DA\n";
else
g<<"NU\n";
else
merge(anc(y),anc(z));
}
f.close();
g.close();
return 0;
}