Cod sursa(job #538323)
#include<fstream>
#include<vector>
#include<string.h>
#define inf "felinare.in"
#define outf "felinare.out"
#define NMax 9000
#define MMax 20100
using namespace std;
fstream f(inf,ios::in), g(outf,ios::out);
int N, M;
int L[NMax], R[NMax], viz[NMax];
vector<int> LA[NMax];
void read()
{
f>>N>>M; int a,b;
for(int i=1; i<=M; i++)
{
f>>a>>b;
LA[a].push_back(b);
// LA[b].push_back(a);
}
}
bool pairUp(int u)
{
if( viz[u] ) return false;
viz[u] = 1;
for(int i=0; i<LA[u].size(); i++)
{
int v = LA[u][i];
if( !R[v] || pairUp(R[v]) )
{
L[u] = v; R[v] = u;
return true;
}
}
return false;
}
int cuplaj()
{
bool ok = true; int c = 0;
while( ok )
{
ok = false; memset(viz, 0, sizeof(viz));
for(int i=1; i<=N; i++)
if( !L[i] && pairUp(i) ) c++, ok = true;
}
return c;
}
void solve()
{
g<< 2*N - cuplaj();
}
int main()
{
read(); solve();
f.close(); g.close();
return 0;
}