Pagini recente » Cod sursa (job #1216111) | Cod sursa (job #1911035) | Cod sursa (job #2705611) | Cod sursa (job #1752217) | Cod sursa (job #184666)
Cod sursa(job #184666)
#include <fstream>
#include <vector>
using namespace std;
#define MAX 15000
int L[MAX], R[MAX], viz[MAX];
int N,M,T,E,cnt;
vector < int > G[MAX];
inline int pairup(int n)
{
if (viz[n])
return 0;
viz[n] = 1;
vector <int> :: iterator it;
for (it = G[n].begin(); it != G[n].end(); ++it)
if (!L[*it]) {
L[*it] = n;
R[n] = *it;
return 1;
}
for (it = G[n].begin(); it != G[n].end(); ++it)
if (pairup(L[*it])) {
L[*it] = n;
R[n] = *it;
return 1;
}
return 0;
}
int main()
{
ifstream fin("java.in");
ofstream fout("java.out");
//fin>>T;
T=1;
while ( T != 0 )
{
fin>>N>>E;
for (int i = 0; i<N; i++)
G[i].clear();
memset(viz,0, sizeof(viz));
memset(L, 0, sizeof(L));
memset(R, 0, sizeof(R));
for ( ; E>0; E--)
{
int a,b;
fin>>a>>b;
G[a].push_back(b);
}
cnt=0;
for (int i = 1; i <= N; ++i)
if (!pairup(i)) {
memset(viz, 0, sizeof(viz));
cnt += pairup(i);
} else
++cnt;
fout<<2*N-cnt<<"\n";
T--;
}
return 0;
}