Pagini recente » Cod sursa (job #3267957) | Cod sursa (job #1315021) | Cod sursa (job #1171094) | Borderou de evaluare (job #1567119) | Cod sursa (job #1645243)
#include <fstream>
#include <cstring>
#define w 100001
using namespace std;
unsigned int t[w];
unsigned int r[w];
unsigned int findR(int x)
{
int r=x,y;
while (t[r]!=0) r=t[r];
while (x!=r)
{
y=t[x];
t[x]=r;
x=y;
}
return r;
}
void unit(int x, int y)
{
if (r[x]<r[y]) t[x]=y;
else t[y]=x;
if (r[x]==r[y]) r[y]++;
}
int main()
{
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,i,m,x,y,op;
f>>n>>m;
for (i=1;i<=n;i++) r[i]=1;
for (i=1;i<=m;i++)
{
f>>op>>x>>y;
if (op==1)
{
unit(findR(x),findR(y));
}
else
{
if (findR(x)!=findR(y)) g<<"NU\n";
else g<<"DA\n";
}
}
f.close();
g.close();
return 0;
}