Cod sursa(job #2680616)
Utilizator | Data | 3 decembrie 2020 20:01:04 | |
---|---|---|---|
Problema | Paduri de multimi disjuncte | Scor | 90 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.93 kb |
#include <ostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m,cod,x,y,i,j,sef[100002],gr[100002],z,t,w;
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
{
sef[i]=i;
gr[i]=1;
}
for(i=1;i<=m;i++)
{
fin>>cod>>x>>y;
if(cod==1)
{
z=x;
while(z!=sef[z])
{
z=sef[z];
}
t=x;
while(t!=sef[t])
{
w=t;
t=sef[t];
sef[w]=z;
}
z=y;
while(z!=sef[z])
{
z=sef[z];
}
t=y;
while(t!=sef[t])
{
w=t;
t=sef[t];
sef[w]=z;
}
if(gr[sef[x]]<gr[sef[y]])
{
gr[sef[y]]=gr[sef[y]]+gr[sef[x]];
sef[x]=sef[y];
}
else
{
gr[sef[x]]=gr[sef[x]]+gr[sef[y]];
sef[y]=sef[x];
}
}
else
{
z=x;
while(z!=sef[z])
{
z=sef[z];
}
t=x;
while(t!=sef[t])
{
w=t;
t=sef[t];
sef[w]=z;
}
z=y;
while(z!=sef[z])
{
z=sef[z];
}
t=y;
while(t!=sef[t])
{
w=t;
t=sef[t];
sef[w]=z;
}
if(sef[x]==sef[y])
{
fout<<"DA"<<"\n";
}
else
{
fout<<"NU\n";
}
}
}
fin.close();
fout.close();
return 0;
}