Cod sursa(job #2679060)
| Utilizator | Data | 29 noiembrie 2020 15:29:59 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.74 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
int n , m;
int t[100005];
void Union (int x , int y)
{
t[x]=y;
}
int Find(int x)
{
int rad=x;
while(t[rad]!=0)
{
rad=t[rad];
}
while(t[x]!=0)
{
int aux=t[x];
t[x]=rad;
x=aux;
}
return rad;
}
int main()
{
f>>n>>m;
for(int i=1;i<=m;++i)
{
int op,a,b;
f>>op>>a>>b;
if(op==1)
{
int r1=Find(a);
int r2=Find(b);
if(r1!=r2)
Union(r1,r2);
}
else
g << ((Find(a) == Find(b))? "DA":"NU")<<"\n";
}
return 0;
}
