Pagini recente » Cod sursa (job #996413) | Cod sursa (job #545974) | Cod sursa (job #372273) | Cod sursa (job #1594766) | Cod sursa (job #2672649)
/**
infoarena.ro/problema/disjoint
Paduri de multimi disjuncte
*/
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int nmax=100005;
int vt[nmax],r[nmax];
int n,m;
int radacina(int x)
{
while(vt[x]!=x)
x=vt[x];
return x;
}
int unire(int x,int y)
{
if(r[x]>r[y])
vt[y]=x;
if(r[x]<r[y])
vt[x]=y;
if(r[x]==r[y])
{
vt[x]=y;
r[y]++;
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
vt[i]=i;
}
int t,x,y;
while(m--)
{
fin>>t>>x>>y;
if(t==1)
unire(radacina(x),radacina(y));
if(t==2)
if(radacina(x)==radacina(y))
fout<<"DA"<<endl;
else
fout<<"NU"<<endl;
}
return 0;
}