Pagini recente » Cod sursa (job #67263) | Cod sursa (job #1071383) | Cod sursa (job #2340961) | Cod sursa (job #427117) | Cod sursa (job #1298654)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,act,x,y;
vector<int> T,rang;
int find(int x){
int y=x;
while (T[x]!=x){
x=T[x]; // T[x] == tatal lui x
}
T[y]=x;//setam drum direct de la x la root
return x;
}
void join(int x, int y){
x=find(x);
y=find(y);
if (rang[x]<rang[y]) T[x]=y;
if (rang[x]>rang[y]) T[y]=x;
if (rang[x]==rang[y]){
T[x]=y;
rang[y]++;
}
}
int main()
{
f>>n>>m;
for(int i=0; i<=n; i++){
T.push_back(i);
rang.push_back(0);
}
for(int i=0; i<m; i++){
f>>act>>x>>y;
if (act==1) join(x,y);
else if (find(x)==find(y)) g<<"DA\n";
else g<<"NU\n";
}
f.close();
g.close();
return 0;
}