Pagini recente » Cod sursa (job #961015) | Cod sursa (job #2424192) | Cod sursa (job #467872) | Cod sursa (job #2076132) | Cod sursa (job #2832843)
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#define nl '\n'
#define pb push_back
using namespace std;
ifstream f ( "felinare.in" );
ofstream g ( "felinare.out" );
const int NMAX = 16400;
bool felinare[NMAX];
bool viz[NMAX];
int l[NMAX], r[NMAX], N;
vector<int>G[NMAX];
bool pairup ( int x )
{
if ( viz[x] )
return 0;
viz[x] = 1;
for ( auto vecin : G[x] )
if ( r[vecin - N] == 0 )
{
r[vecin - N] = x;
l[x] = vecin - N;
return 1;
}
for ( auto vecin : G[x] )
if ( pairup ( r[vecin - N] ) )
{
r[vecin - N] = x;
l[x] = vecin - N;
return 1;
}
return 0;
}
int main()
{
int M;
f >> N >> M;
for ( int i = 1; i <= M; i++ )
{
int x, y;
f >> x >> y;
G[x].pb ( N + y );
G[N + y].pb ( x );
// grad[x]++;
// grad[N + y]++;
}
int nrfelinare = 2 * N;
bool ok = 1;
while ( ok )
{
ok = 0;
for ( int j = 1; j <= N; j++ )
viz[j] = 0;
for ( int i = 1; i <= N; i++ )
if ( l[i] == 0 )
ok |= pairup ( i );
}
for ( int i = 1; i <= N; i++ )
if ( l[i] )
nrfelinare--;
g << nrfelinare << nl;
return 0;
}