Pagini recente » Cod sursa (job #29128) | Cod sursa (job #1760935) | Cod sursa (job #416489) | Cod sursa (job #371465) | Cod sursa (job #563825)
Cod sursa(job #563825)
#include<fstream>
#define MAX 100001
using namespace std;
int T[MAX],R[MAX],N,M;
void compress(int x,int father)
{
int aux;
while(T[x]!=x)
{
aux = x;
x = T[x];
T[aux] = father;
}
}
void reunion(int x,int y)
{
if(R[x]>=R[y])
{
T[y] = x;
R[x] += R[y];
}
else
{
T[x] = y;
R[y] += R[x];
}
}
int find(int x)
{
int init = x;
while(T[x]!=x)
x = T[x];
compress(init,x);
return x;
}
int main()
{
ifstream f("disjoint.in");
f>>N>>M;
int x,y,c,i;
for(i=1;i<=N;++i)
{T[i]=i;R[i]=1;}
ofstream g("disjoint.out");
while(M--)
{
f>>c>>x>>y;
if(c==1)
reunion(find(x),find(y));
else if(find(x) == find(y))g<<"DA\n";
else g<<"NU\n";
}
f.close();
g.close();
return 0;
}