Cod sursa(job #587435)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 4 mai 2011 20:34:56
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
# include <fstream>
using namespace std;
ifstream f ("cuplaj.in");
ofstream g ("cuplaj.out");
int sd[10005],ds[10005],i,n,m,e,k,ok,v[10005],x,y;

  struct nod 
  {
	  int info;
	  nod *urm;
  }*a[10005],*p;

  int df (int x)
  {
	  nod *p;
	  if (v[x]==1)
		  return 0;
	  v[x]=1;
	  p=a[x];
	  while (p)
	  {
		if (ds[p->info]==0)
		{
			sd[x]=p->info;
			ds[p->info]=x;
			return 1;
		}	
		
		p=p->urm;		
	  }
	  p=a[x];
	  while (p)
	  {
		  if (df (ds[p->info])==1)
		  {
			  sd[x]=p->info;
			  ds[p->info]=x;
			  return 1;
		  }
		  p=p->urm;
	  }
	  return 0;
	  
  }
  
  
 void cuplaj ()
  {
	 int ok=0,i;
	  while (ok==0)
	  {
		  ok=1;
		  for (i=1;i<=n;i++)
			  v[i]=0;
		  for (i=1;i<=n;i++)
			  if (sd[i]==0)
				 if (df (i)==1)
				 {
					 ok=0;
					 k++;
				 }
	  }
  }
  
  
int main ()
{
	f>>n>>m>>e;
	for (i=1;i<=e;i++)
	{
		f>>x>>y;
		p=new nod;
		p->info=y;
		p->urm=a[x];
		a[x]=p;
	}
	
	
	cuplaj ();
	g<<k<<"\n";
	for (i=1;i<=10003;i++)
		if (sd[i])
			g<<i<<" "<<sd[i]<<"\n";
		
	return 0;
}