Pagini recente » Cod sursa (job #2630674) | Cod sursa (job #180491) | Cod sursa (job #3185658) | Cod sursa (job #1562727) | Cod sursa (job #3237767)
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
const int nmax=1e5;
int n, m;
int parent[nmax+1], status[nmax+1];
int FindRoot(int node)
{
if(parent[node]==node)
return node;
parent[node]=FindRoot(parent[node]);
return parent[node];
}
void Union(int node1, int node2)
{
node1=FindRoot(node1);
node2=FindRoot(node2);
if(node1==node2)
return;
if(status[node1]<status[node2])
swap(node1, node2);
if(status[node1]==status[node2])//au acelasi rang->inaltimea creste cu unu
status[node1]++;
parent[node2]=node1;
}
int main()
{
in>>n>>m;
for(int i=1; i<=n; i++)
parent[i]=i;
for(int i=1; i<=m; i++)
{
int cod, x, y;
in>>cod>>x>>y;
if(cod==1)
{
Union(x, y);
}
else
{
if(FindRoot(x)==FindRoot(y))
out<<"DA"<<'\n';
else
out<<"NU"<<'\n';
}
}
}