Cod sursa(job #2773387)
| Utilizator | Data | 6 septembrie 2021 20:03:27 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.68 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int sef[100005];
int sefsup(int x){
if(sef[x]==x)
return x;
else
return sef[x]=sefsup(sef[x]);
}
void unite(int x, int y){
int sefx=sefsup(x);
int sefy=sefsup(y);
sef[sefx]=sefy;
}
int main()
{
int n,m,i,op,x,y;
in>>n>>m;
for(i=1;i<=n;++i)
sef[i]=i;
for(i=1;i<=m;++i){
in>>op>>x>>y;
if(op==1)
unite(x,y);
else
if(sefsup(x)==sefsup(y))
out<<"DA"<<'\n';
else
out<<"NU"<<'\n';
}
return 0;
}
