Pagini recente » Cod sursa (job #3032762) | Cod sursa (job #2818563) | Cod sursa (job #2087734) | Cod sursa (job #960777) | Cod sursa (job #2808211)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
class Graf
{
private:
int N;
vector<pair<pair<int, int>, int>> adj;
vector<int> parinte;
vector<int> rank;
public:
Graf(int);
void adaugaMuchie(int, int, int);
void Disjoint();
void Leaga(int, int);
int Gaseste(int);
};
Graf ::Graf(int n)
{
N = n;
parinte.resize(N + 1);
rank.resize(N + 1);
}
void Graf ::adaugaMuchie(int w, int x, int y)
{
adj.push_back(make_pair(make_pair(w, x), y));
}
int Graf ::Gaseste(int x)
{
if (x == parinte[x])
return x;
return Gaseste(parinte[x]);
}
void Graf::Leaga(int a, int b)
{
int x = Gaseste(a);
int y = Gaseste(b);
if (rank[x] >= rank[y])
{
parinte[y] = x;
rank[x] += rank[y];
}
else
{
parinte[x] = y;
rank[y] += rank[x];
}
}
void Graf ::Disjoint()
{
int i, w, x, y;
for (i = 1; i <= N; i++)
{
parinte[i] = i;
rank[i] = 1;
}
for (i = 0; i < adj.size(); i++)
{
w = adj[i].first.first;
x = adj[i].first.second;
y = adj[i].second;
if (w == 1)
Leaga(x, y);
else if (Gaseste(x) == Gaseste(y))
fout << "DA\n";
else
fout << "NU\n";
}
}
int main()
{
int n, m, i, x, y, w;
fin >> n >> m;
Graf G(n);
for (i = 1; i <= m; i++)
{
fin >> w >> x >> y;
G.adaugaMuchie(w, x, y);
}
G.Disjoint();
return 0;
}