Pagini recente » Cod sursa (job #2017599) | Cod sursa (job #2020186) | Cod sursa (job #85514) | Cod sursa (job #183071) | Cod sursa (job #1870840)
#include <fstream>
using namespace std;
ifstream f("bile.in");
ofstream g("bile.out");
bool v[251][251];
int nrmax[63000],t[63000],x[63000],y[63000],cate[63000];
int x0[]={-1,0,1,0},y0[]={0,1,0,-1};
int father(int i)
{
while(t[i]!=0)
i=t[i];
return i;
}
int main()
{
int maxim,n,i,j,acum,ok;
f>>n;
for(i=1;i<=n*n;i++)
{
f>>x[i]>>y[i];
}
maxim=0;
int tata,tatact,xt,yt,l,c,racum,opc;
for(i=n*n;i>=1;i--)
{
if(i==2)
opc=1;
ok=0;
v[x[i]][y[i]]=1;
racum=x[i]*n+y[i];
acum=racum;
for(j=0;j<=3;j++)
{
l=x[i]+x0[j];
c=y[i]+y0[j];
if(v[l][c]==1)
{
ok=1;
tata=father(l*n+c);
if(t[racum]==0)
{
t[acum]=tata;
acum=tata;
nrmax[tata]+=1;
if(maxim<nrmax[tata])
maxim=nrmax[tata];
}
else
{
if(acum!=tata)
{
nrmax[acum]+=nrmax[tata];
t[tata]=acum;
if(maxim<nrmax[acum])
maxim=nrmax[acum];
}
}
}
}
if(ok==0)
{
nrmax[acum]=1;
if(maxim<1)
maxim=1;
}
cate[i]=maxim;
}
for(i=2;i<=n*n;i++)
g<<cate[i]<<'\n';
g<<"0";
return 0;
}