Cod sursa(job #421945)

Utilizator iamdoruTanase Theodor iamdoru Data 21 martie 2010 21:22:08
Problema Felinare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>
FILE *f,*g;
int contor=0,n,m,t[8200];
char a[8200][8200];
int bf() 
	{
	int j,p,i,u=1,coada[8200],sel[8200];
	for(j=1;j<=n+2;j++) 
		sel[j]=0;
	coada[1]=n+1;
	for(j=1;j<=n;j++)
		if(a[n+1][j]=='1') 
			{
			u++;
			coada[u]=j;
			}
	p=u;
	for(j=2;j<=p;j++) 
		for(i=1;i<=n;i++)
			if((sel[i]==0)&&(a[coada[j]][i]=='1')) 
				{
				u++;
				coada[u]=i;
				sel[i]=1;
				t[i]=coada[j];	
				}
	for(j=p+1;j<=u;j++)		
		if(a[coada[j]][n+2]=='1') 
			{
			contor++;
			a[coada[j]][n+2]='0';
			a[t[coada[j]]][coada[j]]='0';
			a[n+1][t[coada[j]]]='0';
			return 1;
			}	
	return 0;
	}
int main() {
int i,x,y;
f=fopen("felinare.in","r");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++) 
	{
	fscanf(f,"%d%d",&x,&y);
	a[x][y]='1';
	}
fclose(f);
for(i=1;i<=n;i++) 
	{
	a[n+1][i]='1';
	a[i][n+2]='1';
	}
x=1;
while(x)
	x=bf();
g=fopen("felinare.out","w");
fprintf(g,"%d\n",2*n-contor);
fclose(g);
return 0;}