Pagini recente » Cod sursa (job #2791110) | Cod sursa (job #2321711) | Cod sursa (job #1487322) | Cod sursa (job #1490322) | Cod sursa (job #2802404)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int GR[100001], h[100001],N,M;
int group(int i)
{
int ANS = i;
while(GR[ANS]!=ANS)
{
ANS=GR[ANS];
}
while(GR[i]!=i)
{
int aux = GR[i];
GR[i]= ANS;
i=aux;
}
return ANS;
}
void Union(int i, int j)
{
if(h[i]>h[j])
GR[j]=i;
else
{
GR[i]=j;
if(h[i]==h[j])
h[j]++;
}
}
int main()
{
in>>N>>M;
for(int i=1; i<=N; i++)
{
GR[i]=i;
h[i]=1;
}
while(M)
{
int op,x,y;
in>>op>>x>>y;
if(op==2)
{
if(group(x)==group(y))
out<<"DA";
else
out<<"NU";
out<<"\n";
}
else
Union(group(x),group(y));
M--;
}
return 0;
}