Pagini recente » Cod sursa (job #577826) | Cod sursa (job #2144045) | Cod sursa (job #2010723) | 1234567890 | Cod sursa (job #2346589)
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
struct
{
int parent, rank;
} p[100001];
int n,m,x,a,b;
int find(int x)
{
if(p[x].parent !=x)
p[x].parent=find(p[x].parent);
return p[x].parent;
}
int Union(int x, int y)
{
int q=find(x);
int w=find(y);
if(q!=w)
{
if(p[q].rank > p[w].rank)
p[w].parent=q;
if(p[w].rank > p[q].rank)
p[q].parent=w;
if(p[w].rank == p[q].rank)
{
p[q].parent=w;
p[w].rank++;
}
}
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
p[i].parent=i;
for(int i=1; i<=m; i++)
{
f>>x>>a>>b;
if(x==1)
Union(a,b);
else
{
if(find(a)==find(b))
g<<"DA"<<'\n';
else
g<<"NU"<<'\n';
}
}
return 0;
}