Pagini recente » Cod sursa (job #166012) | Cod sursa (job #2365319) | Monitorul de evaluare | Cod sursa (job #2166949) | Cod sursa (job #457358)
Cod sursa(job #457358)
#include <vector>
int A[100000];
int main()
{
FILE *f1;
FILE *f2;
int kod,n,m,x,y,j,X_csoport,Y_csoport;
std::vector<int> X,Y;
f1=fopen("disjoint.in","r");
f2=fopen("disjoint.out","w");
fscanf(f1,"%d %d \n",&n,&m);
for (int i=1;i<=n;i++)
A[i]=i;
for (int i=0;i<m;i++)
{
fscanf(f1,"%d %d %d",&kod,&x,&y);
if (kod==1)
{
X.resize(0);
Y.resize(0);
j=x;
while (j!=A[j])
{
X.push_back(j);
j=A[j];
}
X.push_back(j);
j=y;
while (j!=A[j])
{
Y.push_back(j);
j=A[j];
}
Y.push_back(j);
Y_csoport=j;
for (std::vector<int>::iterator it=X.begin(); it<X.end(); it++)
A[*it]=Y_csoport;
//amelyeken vegigjartunk mindegyiket ataliitjuk, hogy egyforma
//halmazhoz tartozzon az y halmazaval, nem muszaly megjegyezni
//ennek a halmaznak a "legfobb elemet", amelyikhez mindegyik tartozik
for (std::vector<int>::iterator it=Y.begin(); it<Y.end(); it++)
A[*it]=Y_csoport;
}
else
{
//ha kod==2, akkor nem muszaly elmenteni az elemeket vektorba,
//hiszen nem valtoztatunk rajtuk, csak megkeressuk azt az elemet
//(halmazt), amelyikhez a keresettek tartoznak
j=x;
while (j!=A[j])
j=A[j];
X_csoport=j;
j=y;
while (j!=A[j])
j=A[j];
Y_csoport=j;
if (X_csoport==Y_csoport)
fprintf(f2,"DA\n");
else
fprintf(f2,"NU\n");
}
}
fclose(f1);
fclose(f2);
}