Cod sursa(job #990190)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 27 august 2013 17:17:40
Problema Felinare Scor 2
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#include<cstring>
using namespace std;
typedef struct celula{
          int nod;
          celula *next;
          }*lista;
lista graf[8200],v;
int i,n,m,x,y,l[8200],r[8200];
bool viz[8200];

bool cupleaza (int nod) {
      if (viz[nod]==1) return(0);
      viz[nod]=1;
      for (lista p=graf[nod]; p; p=p->next)
       if (l[p->nod]==0) {
                         l[p->nod]=nod; r[nod]=p->nod;
                         return(1);
                         }
      for (lista p=graf[nod]; p; p=p->next) {
                int aux=l[p->nod]; r[l[p->nod]]=0; l[p->nod]=nod; r[nod]=p->nod;
                return( cupleaza(aux) );
                }
      return(0);
}
     

int main(void) {
    ifstream fin("felinare.in");
    ofstream fout("felinare.out");
    fin>>n>>m;
    for (i=1; i<=m; ++i) {
            fin>>x>>y;
            v=new celula; v->nod=y; v->next=graf[x]; graf[x]=v;
            }
    bool ok=1;
    while (ok) {
            ok=0; memset(viz,0,sizeof(viz));
            for (i=1; i<=n; ++i)
             if (r[i]==0) ok=(ok|cupleaza(i));
             }
    int cuplaj=0;
    for (i=1; i<=n; ++i)
     if (r[i]>0) ++cuplaj;
    fout<<2*n-cuplaj;
 return(0);
}