Pagini recente » Cod sursa (job #2885139) | Cod sursa (job #1962820) | Cod sursa (job #682487) | Cod sursa (job #2886498) | Cod sursa (job #1294718)
#include <fstream>
#include <vector>
using namespace std;
ifstream is ("disjoint.in");
ofstream os ("disjoint.out");
vector<int>parent, r;
int N, M, c, x, y;
void Union(int x, int y);
int Find(int x);
int main()
{
is >> N >> M;
parent.resize(N+1);
r.resize(N+1);
for(int i = 1; i <= N; ++i)
parent[i] = i;
for(int i = 1; i <= M; ++i)
{
is >> c >> x >> y;
if(c == 1)
Union(Find(x), Find(y));
else
{
if(Find(x) == Find(y))
os << "DA\n";
else
os << "NU\n";
}
}
is.close();
os.close();
return 0;
}
void Union(int x, int y)
{
if(r[x] > r[y])
parent[y] = x;
if(r[x] < r[y])
parent[x] = y;
if(r[x] == r[y])
{
parent[x] = y;
r[y]++;
}
}
int Find(int x)
{
int R = x, y;
while(parent[R] != R)
R = parent[R];
while(parent[x] != x)
{
y = parent[x];
parent[x] = R;
x = y;
}
return R;
}