Pagini recente » Cod sursa (job #1423459) | Cod sursa (job #67070) | Cod sursa (job #2247831) | Cod sursa (job #1633167) | Cod sursa (job #2112114)
#include <fstream>
#define nmax 100005
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
class DisjointSet
{
private:
void Link(int x,int y)
{
if(a[x].r < a[y].r)
a[x].p = y;
else
{
a[y].p = x;
if(a[y].r == a[x].r)
a[x].r ++;
}
}
public:
struct Elem
{
int p,r;
};
Elem a[nmax];
void MakeSet(int x)
{
a[x].p = x;
a[x].r = 0;
}
int FindSet(int x)
{
if(a[x].p != x)
a[x].p = FindSet(a[x].p);
return a[x].p;
}
void Union(int x,int y)
{
Link(FindSet(x),FindSet(y));
}
};
DisjointSet disjset;
int n,m;
int main()
{
int t,x,y;
fin>>n>>m;
for(int i = 1;i <= n;i++)
disjset.MakeSet(i);
for(int i = 0;i < m;i++)
{
fin >> t >> x >> y;
if(t == 1)
disjset.Union(x,y);
else
{
if(disjset.FindSet(x) == disjset.FindSet(y))
fout << "DA\n";
else
fout << "NU\n";
}
}
return 0;
}