Cod sursa(job #56506)

Utilizator gigi_becaliGigi Becali gigi_becali Data 29 aprilie 2007 19:16:31
Problema Felinare Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
using namespace std;
#include <cstdio>
#include <vector>
#include <string>
#define maxn 9000

vector<vector<int> > a;
bool viz[maxn];
int l[maxn], r[maxn];

int n, m;

void citire()
{
  int p, q;
  freopen("felinare.in", "r", stdin);
  scanf("%d %d\n", &n, &m);
  a.resize(n+1);
 

  while(m--)
    {
      scanf("%d %d\n", &p, &q);
      a[p].push_back(q);
    }
}

int pairup(int n)
{
  if(viz[n]) return 0;
  viz[n]=1;


  vector<int>::iterator i;

  for(i=a[n].begin();i!=a[n].end();++i)
    if(!l[*i] || pairup(l[*i]))
      {
	l[*i]=n;
	r[n]=*i;
	return 1;
      }
  return 0;
}

int main()
{
  citire();
  int flow=0;
 
 for(int i=1;i<=n;i++) 
   if(pairup(i)) ++flow;
   else {memset(viz, 0, sizeof(viz)); flow+=pairup(i);}

 freopen("felinare.out", "w", stdout);
 printf("%d\n", n+n-flow);
 return 0;
}