Pagini recente » Cod sursa (job #3292772) | Cod sursa (job #3294123) | Cod sursa (job #3293767) | Cod sursa (job #3292587) | Cod sursa (job #3292370)
#include <bits/stdc++.h>
#define DIM 10001
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector <int> G[DIM];
int found[DIM], v[DIM], x[DIM];
int n, m, Q, ok, a, b, i, paired;
bool dfs(int node){
found[node] = 1;
for(auto k : G[node])
if(!x[k]){
x[k] = node;
v[node] = k;
return true;
}
for(auto k : G[node]){
if(!found[x[k]] && dfs(x[k])){
x[k] = node;
v[node] = k;
return true;
}
}
return false;
}
int main(){
fin >> n >> m >> Q;
while(Q--){
fin >> a >> b;
G[a].push_back(b);
}
ok = 1;
while(ok){
ok = 0;
fill(found + 1, found + n + 1, 0);
for(i=1;i<=n;i++)
if(!v[i])
ok |= dfs(i);
}
for(i=1;i<=n;i++)
if(v[i])
++paired;
fout << paired << "\n";
for(i=1;i<=n;i++)
if(v[i])
fout << i << " " << v[i] << '\n';
}