Pagini recente » Cod sursa (job #2515013) | Cod sursa (job #225720) | Cod sursa (job #599900) | Cod sursa (job #2606501) | Cod sursa (job #826221)
Cod sursa(job #826221)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <iomanip>
#include <string>
#include <cstring>
#include <deque>
#include <stack>
#include <bitset>
#include <list>
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define mp(a,b) make_pair (a, b)
#define ll long long
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)
using namespace std;
typedef struct
{
int point;
int marime;
} element;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
element v[100011];
int Lookup (int nod)
{
if (v[nod].point == -1) return nod;
int a = Lookup (v[nod].point);
v[nod].point = a;
return a;
}
void Unite (int x, int y)
{
int a = Lookup (x);
int b = Lookup (y);
if (a == b) return;
if (v[a].marime > v[b].marime)
{
v[b].point = a;
v[a].marime += v[b].marime;
}
else
{
v[a].point = b;
v[b].marime += v[a].marime;
}
}
int main ()
{
int N, M;
fin >> N >> M;
for (int i = 1; i <= N; i++)
{
v[i].point = -1;
v[i].marime = 1;
}
for (int i = 0, a, x, y; i < M; i++)
{
fin >> a >> x >> y;
if (a == 1) Unite (x, y);
else fout << (Lookup (x) == Lookup (y) ? "DA" : "NU") << "\n";
}
fin.close ();
fout.close ();
return 0;
}