Pagini recente » Cod sursa (job #1327642) | Cod sursa (job #2781872) | Cod sursa (job #2181219) | Cod sursa (job #130599) | Cod sursa (job #2441319)
#include <iostream>
#include <fstream>
#define MaxN 100001
using namespace std;
int n,m;
struct elem
{
int rank;
int tata;
};
elem x[MaxN];
int rad(int i)
{
if(x[i].tata != i)
x[i].tata = rad(x[i].tata);
return x[i].tata;
}
void Union(int a,int b)
{
int aroot = rad(a);
int broot = rad(b);
if(x[aroot].rank < x[broot].rank)
{
x[aroot].tata = broot;
}
else if(x[aroot].rank > x[broot].rank)
{
x[broot].tata = aroot;
}
else
{
x[aroot].rank++;
x[broot].tata=aroot;
}
}
int main()
{
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f>>n>>m;
for(int i=1;i<=n;i++)
x[i].tata = i,x[i].rank=0;
for(int i=1;i<=m;i++)
{
int c,a,b;
f>>c>>a>>b;
if(c==1)
Union(a,b);
else
g<<(rad(a)==rad(b)?"DA\n":"NU\n");
}
f.close();
g.close();
return 0;
}