Pagini recente » Cod sursa (job #1757704) | Cod sursa (job #524947) | Cod sursa (job #2243561) | Cod sursa (job #282180) | Cod sursa (job #1537393)
#include <fstream>
#include <vector>
using namespace std;
vector<int> parent,rnk;
int Find(int x)
{
int a=x;
while(parent[a]!=a) a=parent[a];
while(x!=a){
int b=parent[x];
parent[x]=a;
x=b;
}
return a;
}
void Union(int x, int y)
{
int rx=Find(x), ry=Find(y);
if(rx!=ry){
if(rnk[rx]<rnk[ry]) parent[rx]=ry;
else if(rnk[rx]>rnk[ry]) parent[ry]=rx;
else{ parent[rx]=ry; rnk[ry]++; }
}
}
int main()
{
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m; fin>>n>>m;
parent.resize(n+1); rnk.resize(n+1);
for(int i=1;i<=n;++i){ parent[i]=i; rnk[i]=0; }
for(int i=0;i<m;++i){
int cod,a,b; fin>>cod>>a>>b;
if(cod==1) Union(a,b);
else if(Find(a)==Find(b)) fout<<"DA\n";
else fout<<"NU\n";
}
}