Pagini recente » Cod sursa (job #2974330) | Cod sursa (job #1354826) | Cod sursa (job #2940581) | Cod sursa (job #1702265) | Cod sursa (job #3193456)
#include <bits/stdc++.h>
using namespace std;
const string file_name = "coborare";
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX = 100000;
const int Mod = 100003;
int T[NMAX];
int rang[NMAX];
int Rad(int k)
{
if(T[k]==0)
return k;
else
{
int x = Rad(T[k]);
T[k] = x;
return x;
}
}
void Union(int p, int k)
{
int rk = Rad(k), rp = Rad(p);
if(rk!=rp)
{
if(rang[rk]>rang[rp])
{
T[rp] = rk;
}
else
{
T[rk]=rp; //rp e tatal lui rk
if(rang[rk]==rang[rp])
rang[rp]++; //rangul = gradul tatalui creste cu 1
}
}
}
/*
void DFS(int nod)
{
viz[nod] = 1;
for(auto nd:G[nod])
{
if(!viz[nd])
DFS(nd);
}
}
void BFS(int nods)
{
queue<int> q;
q.push(nods);
while(!q.empty())
{
int nc = q.front();
q.pop();
for(auto nbr: G[nc])
{
if(!viz[nbr])
{
viz[nbr] = 1;
T[nbr] = nc;
q.push(nbr);
}
}
}
}*/
//Dijkstra - bfs pentru cel mai mic drum de la un nod selectat la toate celelalte noduri, adaugam in PQ nodul cu - pt. sortare -> min heap //
int N,M,i,op;
int main()
{
fin>>N>>M;
int x,y;
for(i=1;i<=N;i++)
{
T[i] = i;
rang[i] = 1;
}
for(i=1;i<=M;i++)
{
fin>>op>>x>>y;
if(op==1)
{
if(Rad(x)==Rad(y))
fout<<"DA"<<'\n';
else fout<<"NU"<<'\n';
}
else if(op==2)
{
if(Rad(x)==Rad(y))
Union(x,y);
}
}
}