Pagini recente » Cod sursa (job #754281) | Cod sursa (job #2109919) | Cod sursa (job #174871) | Cod sursa (job #554390) | Cod sursa (job #2961745)
#include <bits/stdc++.h>
#define oo 1e9
using namespace std;
//vector<vector<int> > cap;
//vector<vector<vector<int> > > muchie;
//vector<int> nivel;
int n, t;
int max_flow;
int MaxFlow(vector<vector<int>> &cap, int s, int t) {
int n = cap.size();
vector<vector<int>> flow(n, vector<int>(n));
int ans = 0;
while (true) {
vector<int> par(n, -1);
par[s] = -2;
queue<int> q;
q.push(s);
while (!q.empty() && par[t] == -1) {
int u = q.front();
q.pop();
for (int v = 0; v < n; v++) {
if (par[v] == -1 && cap[u][v] - flow[u][v] > 0) {
par[v] = u;
q.push(v);
}
}
}
if (par[t] == -1) {
break;
}
int f = INT_MAX;
for (int v = t; v != s; v = par[v]) {
f = min(f, cap[par[v]][v] - flow[par[v]][v]);
}
for (int v = t; v != s; v = par[v]) {
flow[par[v]][v] += f;
flow[v][par[v]] -= f;
}
ans += f;
}
return ans;
}
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int main() {
int n1, n2, m;
fin >> n1 >> n2 >> m;
n = n1 + n2 + 2;
vector<vector<int>> cap(n, vector<int>(n));
for(int i = 0; i < m; i++){
int x, y, c;
fin >> x >> y;
cap[x][y + n1] = 1;
}
for(int i = 1; i <= n1; i++){
cap[0][i] = 1;
}
for(int i = n1+1; i <= n1+n2; i++){
cap[i][n-1] = 1;
}
fout<<MaxFlow(cap, 0, n-1);
return 0;
}