Pagini recente » Cod sursa (job #1958893) | Cod sursa (job #1254245) | Cod sursa (job #1060707) | Cod sursa (job #1899310) | Cod sursa (job #116988)
Cod sursa(job #116988)
#include<cstdio>
#include<stdlib.h>
#define MAXN 10000
struct nod {int nr,gr,tip;};
nod h[MAXN];
int sort_function(nod *a,nod *b)
{
return a->gr-b->gr;
}
int main()
{
FILE *f,*g;
int *x[MAXN],*y[MAXN],*xx[MAXN],*yy[MAXN],n,m,fel[MAXN],varf,tip,ok,varf2,k,total=0;
int i,j,a,b;
f=fopen("felinare.in","r");
g=fopen("felinare.out","w");
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++) {x[i]=(int *) malloc(sizeof(int));x[i][0]=0;
y[i]=(int *) malloc(sizeof(int));y[i][0]=0;
xx[i]=(int *) malloc(sizeof(int));xx[i][0]=0;
yy[i]=(int *) malloc(sizeof(int));yy[i][0]=0;
fel[i]=0;
}
for(i=0;i<m;i++)
{
fscanf(f,"%d %d",&a,&b);
x[a]=(int *)realloc(x[a],sizeof(int)*(x[a][0]+2));
y[b]=(int *)realloc(y[b],sizeof(int)*(y[b][0]+2));
x[a][++x[a][0]]=b;
y[b][++y[b][0]]=a;
xx[a]=(int *)realloc(xx[a],sizeof(int)*(xx[a][0]+2));
yy[b]=(int *)realloc(yy[b],sizeof(int)*(yy[b][0]+2));
xx[a][++xx[a][0]]=0;
yy[b][++yy[b][0]]=0;
}
for(i=1;i<=n;i++)
{
h[i].nr=i;
h[i].gr=x[i][0];
h[i].tip=1;
}
for(i=1;i<=n;i++)
{
h[i+n].nr=i;
h[i+n].gr=y[i][0];
h[i+n].tip=2;
}
qsort(h+1, 2*n, sizeof(nod), (int (*)(const void* ,const void* ))sort_function);
for(i=1;i<=2*n;i++)
{
varf=h[i].nr;
tip=h[i].tip;
if(h[i].gr==0) {fel[varf]+=tip;total++;}
else{
if(tip==2)
{
ok=1;
for(j=1;j<=y[varf][0];j++)
if(yy[varf][j]) {ok=0;break;}
if(ok)
{
fel[varf]+=tip;total++;
for(j=1;j<=y[varf][0];j++)
{
yy[varf][j]=1;
varf2=y[varf][j];
for(k=1;k<=x[varf2][0];k++)
if(x[varf2][k]==varf){xx[varf2][k]=1;break;}
}
}
}
if(tip==1)
{
ok=1;
for(j=1;j<=x[varf][0];j++)
if(xx[varf][j]) {ok=0;break;}
if(ok)
{
fel[varf]+=tip;total++;
for(j=1;j<=x[varf][0];j++)
{
xx[varf][j]=1;
varf2=x[varf][j];
for(k=1;k<=y[varf2][0];k++)
if(y[varf2][k]==varf){yy[varf2][k]=1;break;}
}
}
}
}
}
fprintf(g,"%d\n",total);
for(i=1;i<=n;i++)
fprintf(g,"%d\n",fel[i]);
fclose(f);fclose(g);
return 0;
}