Pagini recente » Cod sursa (job #2708753) | Cod sursa (job #1396637) | Cod sursa (job #245916) | Cod sursa (job #3291095) | Cod sursa (job #1789733)
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int t[100005],h[100005];
int findset(int u)
{
while(t[u]!=u)
{
u=t[u];
}
return u;
}
void unionset(int u,int v)
{
int tu,tv;
tu=findset(u);
tv=findset(v);
if(h[tu]==h[tv])
{
h[tu]++;
t[tv]=t[tu];
}
else
if(h[tu]>=h[tv])
{
t[tv]=t[tu];
}
else
{
t[tu]=t[tv];
}
}
int main()
{
int i,n,m,op,r,d;
in>>n>>m;
for(i=1;i<=n;i++)
{
t[i]=i;
h[i]=1;
}
for(i=1;i<=m;i++)
{
in>>op>>r>>d;
if(op==1)
{
if(findset(r)!=findset(d))
{
unionset(r,d);
}
}
else{
if(findset(r)==findset(d))
out<<"DA"<<"\n";
else
out<<"NU"<<"\n";
}
}
return 0;
}