Pagini recente » Cod sursa (job #1541544) | Monitorul de evaluare | Cod sursa (job #221008) | Cod sursa (job #549976) | Cod sursa (job #2073179)
#include <fstream>
#include <stdlib.h>
#define NMAX 100000
using namespace std;
int tomb[NMAX],hossz[NMAX];
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int root(int a){
int i=a;
while(i!=tomb[i]){
tomb[i]=tomb[tomb[i]];
i=tomb[i];
}
return i;
}
void unite(int a, int b){
int root1=root(a);
int root2=root(b);
if(root1!=root2){
//tomb[root1]=root2;
if(hossz[root1]>hossz[root2]){
tomb[root2]=root1;
hossz[root1]+=hossz[root2];
}
else{
tomb[root1]=root2;
hossz[root2]+=hossz[root1];
}
}
}
void ask(int a,int b){
int root1=root(a);
int root2=root(b);
if(root1==root2){
g<<"DA\n";
}
else{
g<<"NU\n";
}
}
int main()
{
int n,m,muv,a,b;
f>>n>>m;
bool ok;
for(int i=1;i<=n;i++){
tomb[i]=i;
hossz[i]=1;
}
for(int i=0;i<m;i++){
f>>muv>>a>>b;
if(muv==1){
unite(a,b);
}
else{
ask(a,b);
}
}
f.close();
g.close();
return 0;
}