Pagini recente » Cod sursa (job #1885865) | Cod sursa (job #3241341) | Cod sursa (job #146824) | Cod sursa (job #1074752) | Cod sursa (job #397606)
Cod sursa(job #397606)
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
#define MAXN 20005
int N, M;
vector<int> con[MAXN];
int l[MAXN], r[MAXN]; char used[MAXN];
inline int pair_up(int nod) {
if (used[nod]) {
return 0;
}
used[nod] = 1;
vector<int> :: iterator it;
for (it = con[nod].begin(); it != con[nod].end(); it++) {
if (r[*it] == 0) {
l[nod] = *it;
r[*it] = nod;
return 1;
}
}
for (it = con[nod].begin(); it != con[nod].end(); it++) {
if (pair_up(r[*it])) {
l[nod] = *it;
r[*it] = nod;
return 1;
}
}
return 0;
}
int main() {
freopen("strazi.in", "rt", stdin);
#ifndef DEBUG
freopen("strazi.out", "wt", stdout);
#endif
scanf("%d %d", &N, &M);
for (int i = 0; i < M; i++) {
int x, y;
scanf("%d %d", &x, &y);
con[x].push_back(y);
}
for (bool done = false; !done; ) {
memset(used, 0, sizeof(used));
done = true;
for (int i = 1; i <= N; i++) {
if (l[i] == 0) {
if (pair_up(i)) {
done = false;
}
}
}
}
int REZ = N;
for (int i = 1; i <= N; i++) {
REZ -= (l[i] != 0);
}
printf("%d\n", REZ - 1);
return 0;
}