Pagini recente » Cod sursa (job #2403686) | Cod sursa (job #1020107) | Cod sursa (job #67913) | Borderou de evaluare (job #1900642) | Cod sursa (job #796352)
Cod sursa(job #796352)
#include <iostream>
#include <fstream>
#define dim 100005
using namespace std;
int n,m;
int arb[dim];
int adm[dim];
void red(int root, int p)
{
int next;
while(arb[p]!=root)
{
next = arb[p];
arb[p]=root;
p = next;
}
}
bool req(int p1, int p2)
{
int root,poz;
poz=p2;
while(arb[poz]!=poz)
poz=arb[poz];
root = poz;
red(root, p2);
poz=p1;
while(arb[poz]!=poz)
poz=arb[poz];
root = poz;
red(root, p1);
if (arb[p1]==arb[p2])
return true;
return false;
}
void lnk(int p1, int p2)
{
if (adm[p1]== adm[p2])
{
arb[p2]=p1;
adm[p1]++;
return;
}
if (adm[p1]>adm[p2])
arb[p2]=p1;//link p2 to p1
else
arb[p1]=p2;//link p1 to p2
}
int main()
{
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int s,p1,p2;
cin>>n>>m;
//ini
for (int i=0;i<n;i++)
{
arb[i]=i;
adm[i]=1;
}
for (int i=0;i<m;i++)
{
cin>>s>>p1>>p2;
if (s==1)
lnk(p1,p2);
else
{
if (req(p1,p2))
cout<<"DA"<<endl;
else
cout<<"NU"<<endl;
}
}
return 0;
}