Pagini recente » Clasament sdfa | Cod sursa (job #2385128) | Cod sursa (job #192023) | Cod sursa (job #1823363) | Cod sursa (job #2793961)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
int tati[100001];
int inaltimi[100001];
int n,m;
int tata_suprem = 0;
int gasire_tata(int x)
{
int y = x;
while(x != tati[x])
{
x = tati[x];
}
while(y!=tati[y])
{
y = tati[y];
tati[y] = x;
}
return x;
}
void inserare(int x,int y){
int tata_final_x = gasire_tata(x);
int tata_final_y = gasire_tata(y);
if(inaltimi[tata_final_x]>inaltimi[tata_final_y])
{
tati[tata_final_y] = tata_final_x;
}
else if(inaltimi[tata_final_x]<inaltimi[tata_final_y])
{
tati[tata_final_x] = tata_final_y;
}
else if(inaltimi[tata_final_x]==inaltimi[tata_final_y])
{
tati[tata_final_y] = tata_final_x;
inaltimi[tata_final_x] ++;
}
}
void afisare(int x,int y)
{
int tata_final_x = gasire_tata(x);
int tata_final_y = gasire_tata(y);
if(tata_final_x == tata_final_y)
{
g << "DA\n";
return;
}
g << "NU\n";
return;
}
int main()
{
f >> n >> m;
for(int i = 1;i<=n;i++){
tati[i] = i;
inaltimi[i] = 1;
}
for(int i = 1;i<=m;i++){
int c,x,y;
f >> c >> x >> y;
if(c == 1){
inserare(x,y);
}
else{
afisare(x,y);
}
}
}