Pagini recente » Cod sursa (job #1309742) | Cod sursa (job #1269490) | Cod sursa (job #1573607) | Cod sursa (job #1382374) | Cod sursa (job #18107)
Cod sursa(job #18107)
#include <stdio.h>
int x[251],y[251],z[251][251],max,n,i,j,k,s[312501],m[312501],p[312501];
FILE *f;
void unite (int *a, int *b)
{
while (p[*a]!=*a) *a=p[p[*a]];
while (p[*b]!=*b) *b=p[p[*b]];
p[*b]=*a;
s[*a]+=s[*b];
s[*b]=0;
if (s[*a]>max) max=s[*a];
}
void add(int x, int y)
{
k++;
p[k]=k;
s[k]=1;
z[x][y]=k;
if (z[x+1][y]!=0) unite (&z[x+1][y],&z[x][y]);
if (z[x-1][y]!=0) unite (&z[x-1][y],&z[x][y]);
if (z[x][y+1]!=0) unite (&z[x][y+1],&z[x][y]);
if (z[x][y-1]!=0) unite (&z[x][y-1],&z[x][y]);
m[k]=max;
}
int main (void)
{
f=fopen("bile.in","r");
fscanf(f,"%d",&n);
for(i=n*n;i>0;i--)
fscanf(f,"%d %d",&x[i],&y[i]);
fclose(f);
k=0;
max=1;
for(i=1;i<=n*n;i++)
{
add(x[i],y[i]);
}
f=fopen("bile.out","w");
for(i=n*n-1;i>=0;i--)
{
fprintf(f,"%d\n",m[i]);
}
fclose(f);
return 0;
}