Pagini recente » Cod sursa (job #1177360) | Cod sursa (job #1216145) | Cod sursa (job #191638) | Cod sursa (job #2689619) | Cod sursa (job #738798)
Cod sursa(job #738798)
#include <fstream>
#include <cstdlib>
using namespace std;
const int N_MAX=100011;
int f[N_MAX], r[N_MAX];
inline int _min(int x, int y) {return x <= y ? x : y;}
int find(int x)
{
int y, z;
for(y=x; y != f[y]; y=f[y]);
for(; x != f[x]; x=z)
{
z=f[x];
f[x]=y;
}
return y;
}
inline void Unite(int x, int y)
{
if(r[x] == r[y])
{
if(x != y)
f[y]=x;
++r[y];
}
else r[x]=r[y]=_min(r[x], r[y]);
}
int main()
{
int N, M, i, op, x, y;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
in>>N>>M;
for(i=1; i <= N; ++i)
f[i]=i, r[i]=1;
for(; M; --M)
{
in>>op>>x>>y;
if(1 == op)
Unite(find(x), find(y));
else out<<(find(x) == find(y) ? "DA" : "NU" )<<'\n';
}
return EXIT_SUCCESS;
}