Pagini recente » Cod sursa (job #2065963) | Cod sursa (job #1736100) | Cod sursa (job #187095) | Cod sursa (job #552495) | Cod sursa (job #1801843)
#include <fstream>
using namespace std;
int n,m,i,x,y,c,v[100020],w[100020];
int find(int x)
{
int q,y;
for (q=x; v[q]!=q; q=v[q]);
while(v[x]!=x)
{
y=v[x];
v[x]=q;
x=y;
}
return q;
}
void unite(int x, int y)
{
if (w[x]>w[y])
v[y]=x;
else v[x]=y;
if(w[x]==w[y]) w[y]++;
}
int main()
{
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f>>n>>m;
for (i=1; i<=n; i++)
{
v[i]=i;
w[i]=1;
}
for (i=1; i<=m; i++)
{
f>>c>>x>>y;
if(c==2)
{
if(find(x)==find(y)) g<<"DA\n";
else g<<"NU\n";
}
else
{
unite(find(x), find(y));
}
}
return 0;
}