Pagini recente » Cod sursa (job #1655670) | Cod sursa (job #1017386) | Cod sursa (job #967559) | Cod sursa (job #359676) | Cod sursa (job #990190)
Cod sursa(job #990190)
#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);
}