Pagini recente » Cod sursa (job #1810502) | Cod sursa (job #1624783) | Cod sursa (job #2365358) | Cod sursa (job #2770657) | Cod sursa (job #3263260)
#include <bits/stdc++.h>
using namespace std;
#define TITLE "disjoint"
ifstream f (TITLE".in");
ofstream g (TITLE".out");
int Father[100002];
int Rang[100002];
int Root(int Node)
{
if(Father[Node]==Node)
return Node;
return Father[Node]=Root(Father[Node]);
}
void Union(int Node1, int Node2)
{
int Rad1=Root(Node1),Rad2=Root(Node2);
if(Rang[Rad1]>Rang[Rad2])
Father[Rad2]=Rad1;
else
Father[Rad1]=Rad2;
if(Rang[Rad1]==Rang[Rad2])
Rang[Rad1]++;
}
int main()
{
int n,m;
f>>n>>m;
for(int i=1; i<=n; i++)
{
Father[i]=i;
Rang[i]=1;
}
while(m--)
{
int c,a,b;
f>>c>>a>>b;
if(c==1)
Union(a,b);
else if(Root(a)==Root(b))
g<<"DA\n";
else
g<<"NU\n";
}
return 0;
}