Pagini recente » Cod sursa (job #584915) | Cod sursa (job #1979517) | Cod sursa (job #1613804) | Cod sursa (job #208460) | Cod sursa (job #2955058)
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int rang[100005],tata[100005];
void union1(int reprezentant1,int reprezentant2)
{
if(rang[reprezentant1]==rang[reprezentant2])
{
tata[reprezentant1]=reprezentant2;
rang[reprezentant2]++;
}
else if(rang[reprezentant1]>rang[reprezentant2])
{
tata[reprezentant2]=reprezentant1;
}
else if(rang[reprezentant1]<rang[reprezentant2])
{
tata[reprezentant1]=reprezentant2;
}
}
int find1(int node)
{
int reprezentant=node;
while(tata[reprezentant]!=reprezentant)
{
reprezentant=tata[reprezentant];
}
while(tata[node]!=node)
{
int copie=tata[node];
tata[node]=reprezentant;
node=copie;
}
return reprezentant;
}
int main()
{
int n,m;
in>>n>>m;
for(int i=1;i<=n;i++)
{
tata[i]=i;
rang[i]=1;
}
for(int i=1;i<=m;i++)
{
int q,node1,node2;
in>>q>>node1>>node2;
if(q==1)///unim cei 2 reprezentanti
{
union1(find1(node1),find1(node2));
}
if(q==2)
{
if(find1(node1)==find1(node2))///daca au ac reprezentant
out<<"DA"<<'\n';
else
out<<"NU"<<'\n';
}
}
return 0;
}