Pagini recente » Cod sursa (job #2595760) | Cod sursa (job #2113657) | Poze preONI 2007 - wii-play | Cod sursa (job #2530932) | Cod sursa (job #2437606)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX = 100010;
int rg[NMAX],id[NMAX];
int n,m;
void init()
{
for(int i =0; i<=n; i++)
id[i]=i,rg[i]=1;
}
int uFind(int s)
{
int root=s;
while(id[root]!=root)
root=id[root];
while(s!=root)
{
int next = id[s];
id[s]=root;
s=next;
}
return root;
}
void uUnion(int p,int q)
{
int root1 = uFind(p);
int root2 = uFind(q);
if(root1==root2)return;
if(rg[root1]>rg[root2])
id[root2]=root1;
else
id[root1]=root2;
if(rg[root1]==rg[root2])
rg[root2]++;
}
int main()
{
fin>>n>>m;
init();
while(m--)
{
int q,x,y;
fin>>q>>x>>y;
if(q-1)
{
//check if same component
if(uFind(x)==uFind(y))
fout<<"DA"<<'\n';
else
fout<<"NU"<<'\n';
}
else
{
//union
uUnion(x,y);
}
}
return 0;
}