Cod sursa(job #2390653)
| Utilizator | Data | 28 martie 2019 11:19:54 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 10 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.19 kb |
#include <fstream>
#include <vector>
#define NMAX 100001
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int comp[NMAX];
vector <vector<int> > L(NMAX);
int main()
{
int n,m;
f>>n>>m;
for (int i=1;i<=n;i++)
{
comp[i]=i;
L[i].push_back(i);
}
for (int i=1;i<=m;i++)
{
int cod,x,y;
f>>cod>>x>>y;
if (cod==1)
{
if (L[comp[x]].size()<L[comp[y]].size())
{
for (auto i=L[x].begin(); i!=L[x].end(); i++)
{
comp[(*i)]=y;
L[y].push_back((*i));
}
L[x].clear();
}
else
{
for (auto i=L[y].begin(); i!=L[y].end(); i++)
{
comp[(*i)]=x;
L[x].push_back((*i));
}
L[y].clear();
}
}
else
if (cod==2)
{
if (comp[x]==comp[y])
g<<"DA";
else g<<"NU";
g<<'\n';
}
}
return 0;
}
