Mai intai trebuie sa te autentifici.
Cod sursa(job #2390594)
Utilizator | Data | 28 martie 2019 10:58:33 | |
---|---|---|---|
Problema | Paduri de multimi disjuncte | Scor | 40 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.94 kb |
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int comp[100000],n;
vector <vector<int>> nod_comp;
void reuniune(int x, int y)
{
int nrx=nod_comp[x].size(),nry=nod_comp[y].size();
if(nrx<nry)
{
int aux=x;
x=y;
y=aux;
}
int aux=comp[y];
for(int i=1;i<=n;i++)
if(comp[i]==aux) {comp[i]=comp[x];
nod_comp[x].push_back(i);}
}
int main()
{
int m;
fin>>n>>m;
nod_comp= vector <vector<int> > (n+1);
for(int i=1;i<=n;i++)
{
comp[i]=i;
nod_comp[i].push_back(i);
}
for(int i=1;i<=m;i++)
{
int cod,x,y;
fin>>cod>>x>>y;
if(cod==1) reuniune(x,y);
if(cod==2)
{
if(comp[x]==comp[y]) fout<<"DA\n";
else fout<<"NU\n";
}
}
return 0;
}