Pagini recente » Cod sursa (job #2537937) | Cod sursa (job #2678414) | Cod sursa (job #27508) | Cod sursa (job #1856858) | Cod sursa (job #2946285)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
void initializareNumarNod(vector<int>& numarNod, int n) {
for(int i = 1; i<= n; i++)
numarNod.push_back(1);
}
void initializareTata(vector<int>& tata, int n) {
for(int i = 0; i <= n; i++)
tata.push_back(i);
}
void operatia1(int x, int y, vector<int>& tata, vector<int>& numarNod) {
int radX, radY, radX1, radY1;
fin>>x>>y;
radX = radX1 = x;
radY = radY1 = y;
while (tata[radX]!=radX)
radX=tata[radX];
while (tata[radY]!=radY)
radY=tata[radY];
while (tata[radX1]!=radX1){
radX1=tata[radX1];
tata[radX1]=radX;
}
while (tata[radY1]!=radY1){
radY1=tata[radY1];
tata[radY1]=radY;
}
if (numarNod[radX]>=numarNod[radY])
tata[radY]=radX;
else
tata[radX]=radY;
}
void operatia2(int x, int y, vector<int>& tata, vector<int>& numarNod) {
int radX, radY, radX1, radY1;
fin>>x>>y;
radX = radX1 = x;
radY = radY1 = y;
while (tata[radX]!=radX)
radX=tata[radX];
while (tata[radY]!=radY)
radY=tata[radY];
if (radX==radY)
fout <<"DA"<<'\n';
else
fout <<"NU"<<'\n';
while (tata[radX1]!=radX1){
radX1=tata[radX1];
tata[radX1]=radX;
}
while (tata[radY1]!=radY1){
radY1=tata[radY1];
tata[radY1]=radY;
}
}
int main()
{
int n, m;
fin>>n>>m;
vector<int> tata;
vector<int> numarNod;
initializareNumarNod(numarNod,n);
initializareTata(tata, n);
for (int i=0; i<m; i++){
int t,x,y;
fin >>t;
if (t==1){
operatia1(x,y,tata,numarNod);
}else{
operatia2(x,y,tata,numarNod);
}
}
for(int i = 0; i< n; i++)
cout<<tata[i]<<" ";
return 0;
}