Pagini recente » Cod sursa (job #832783) | Mihnea Andreescu | Link-uri | Monitorul de evaluare | Cod sursa (job #1214440)
#include <fstream>
using namespace std;
int pmd[100005][2],n,m,cod,x,y,lista[100005];
int main()
{
ifstream in ("disjoint.in");
ofstream out ("disjoint.out");
in>>n>>m;
for (int i=1;i<=n;++i) pmd[i][0]=i,pmd[i][1]=1;
for (int i=1;i<=m;++i)
{
in>>cod>>x>>y;
int r1,r2;
r1=x; lista[0]=0;
while (pmd[r1][0]!=r1)
{
++lista[0];
lista[lista[0]]=r1;
r1=pmd[r1][0];
}
for (int j=1;j<=lista[0];++j) pmd[lista[j]][0]=r1;
r2=y; lista[0]=0;
while (pmd[r2][0]!=r2)
{
++lista[0];
lista[lista[0]]=r2;
r2=pmd[r2][0];
}
for (int j=1;j<=lista[0];++j) pmd[lista[j]][0]=r2;
if (cod==1)
{
if (pmd[r1][1]>pmd[r2][1])
{
pmd[r2][0]=r1;
pmd[r1][1]+=pmd[r2][1];
}else
{
pmd[r1][0]=r2;
pmd[r2][1]+=pmd[r1][1];
}
}else
{
if (r1==r2) out<<"DA\n";else out<<"NU\n";
}
}
in.close();
out.close();
return 0;
}