Pagini recente » Cod sursa (job #700592) | Cod sursa (job #728248) | Cod sursa (job #939838) | Cod sursa (job #2909407) | Cod sursa (job #2966181)
#include<fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m;
int gr[100000], t[100000];
int op2(int x)
{
int v=x,y;
while(t[v]!=v) v=t[v];
y=x;
while(t[y]!=v)
{
y=t[x];
t[x]=v;
x=y;
}
return v;
}
void op1(int x, int y)
{
int v1,v2;
v1=op2(x);
v2=op2(y);
if(gr[v1]<gr[v2]) t[v2]=v1;
else t[v1]=v2;
if(gr[v1]==gr[v2]) gr[v1]++;
}
void disjoint()
{
int cod,x,y,i;
f>>n>>m;
for(i=1; i<=n; i++)
{
gr[i]=1;
t[i]=i;
}
for(i=0;i<m;i++)
{
f>>cod>>x>>y;
if(cod==1)
op1(x,y);
else
{
if(op2(x)==op2(y)) g<<"DA\n";
else g<<"NU\n";
}
}
f.close();
g.close();
}
int main()
{
disjoint();
return 0;
}