Pagini recente » Cod sursa (job #1575361) | Cod sursa (job #822012) | Cod sursa (job #2403280) | Istoria paginii runda/testround12/clasament | Cod sursa (job #2948381)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int Cautare(int nod, vector<int>&radacina)
{
if(radacina[nod]!=nod)
radacina[nod]=Cautare(radacina[nod], radacina);
return radacina[nod];
}
void Reuniune(int x, int y, vector<int>&radacina)
{
int radx, rady;
radx=Cautare(x, radacina);
rady=Cautare(y, radacina);
radacina[radx]=rady;
}
vector<int> CodDisjoint(vector <pair<int, pair<int, int>>>operatii, int N)
{
vector <int> solutie;
vector <int> radacina(N+1);
for(int i=1;i<=N; i++)
radacina[i]=i;
for(int i=0; i < operatii.size();i++)
{
int op = operatii[i].first;
int x = operatii[i].second.first;
int y = operatii[i].second.second;
if(op==1)
Reuniune(x, y, radacina);
else
{
if(Cautare(x, radacina)==Cautare(y, radacina))
solutie.push_back(1);
else
solutie.push_back(0);
}
}
return solutie;
}
int main()
{
int N, M, op, x, y;
f>>N>>M;
vector <pair<int, pair<int, int>>>operatii;
for(int i=0; i<M; i++)
{
f>>op>>x>>y;
operatii.push_back(make_pair(op, make_pair(x, y)));
}
vector<int>afisare=CodDisjoint(operatii, N);
for(auto i=0; i<afisare.size(); i++)
{
if(afisare[i]==1)
g<<"DA"<<'\n';
else
g<<"NU"<<'\n';
}
f.close();
g.close();
}