Cod sursa(job #2837439)
| Utilizator | Data | 22 ianuarie 2022 10:39:40 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1 kb |
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int aux,r1,r2,x,y,h[100001],t[100001],n,m,i,p;
int main()
{
fin>>n>>m;
for(i=1; i<=n; i++)
{
h[i]=1;
t[i]=i;
}
for(i=1; i<=m; i++)
{
fin>>p>>x>>y;;
r1=x;
r2=y;
while(r1!=t[r1])r1=t[r1];
while(r2!=t[r2])r2=t[r2];
if(p==2)
{
if(r1==r2)fout<<"DA";
else fout<<"NU";
fout<<'\n';
while(x!=r1)
{
aux=t[x];
t[x]=r1;
x=aux;
}
while(y!=r2)
{
aux=t[y];
t[y]=r2;
y=aux;
}
}
else
{
if(h[r1]>h[r2]) t[r2]=r1;
else
{
t[r1]=r2;
if(h[r1]==h[r2])h[r2]++;
}
}
}
return 0;
}
