Pagini recente » Cod sursa (job #1572609) | Cod sursa (job #1770864) | Cod sursa (job #515747) | Cod sursa (job #2104951) | Cod sursa (job #2806239)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
class Graf
{
private:
int parinte[100001], dimensiune[100001];
public:
void disjoint();
int gasire_multime(int);
void operatie_tip_1(int, int);
};
int Graf :: gasire_multime(int a)
{
while(a != parinte[a])
a = parinte[a];
return a;
}
void Graf :: operatie_tip_1(int a, int b)
{
a = gasire_multime(a);
b = gasire_multime(b);
if(dimensiune[b] <= dimensiune[a])
{
dimensiune[a] += dimensiune[b];
parinte[b] = a;
}
else
{
dimensiune[b] += dimensiune[a];
parinte[a] = b;
}
}
void Graf :: disjoint()
{
int numar_multimi, numar_operatii, numar1, numar2, tip_operatie;
fin >> numar_multimi >> numar_operatii;
for(int i = 0; i < numar_multimi; i++)
{
dimensiune[i] = 1;
parinte[i] = i;
}
for(int i = 0; i < numar_operatii; i++)
{
fin >> tip_operatie >> numar1 >> numar2;
if(tip_operatie == 1)
operatie_tip_1(numar1, numar2);
else if(gasire_multime(numar1) == gasire_multime(numar2))
fout << "DA" << '\n';
else fout << "NU" << '\n';
}
}
int main()
{
Graf x;
x.disjoint();
return 0;
}