Pagini recente » Cod sursa (job #1390982) | Cod sursa (job #1741067) | Cod sursa (job #567408) | Cod sursa (job #2618107) | Cod sursa (job #2981965)
#include <bits/stdc++.h>
using namespace std;
const int nmx = 1e4 + 2;
vector<int> ad[nmx];
int st[nmx]; // st[A] = B
int dr[nmx]; // dr[B] = A
int viz[nmx];
int n,m,e;
int flg = 0;
#if 1
#define cin fin
#define cout fout
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
#endif // 1
bool dfs(int k){ // k - nod din A
if(k==0)
return 0;
if(viz[k])
return 0;
viz[k] = 1;
for(int to : ad[k]){
if(!dr[to] || dfs(dr[to])){
dr[to] = k;
st[k] = to;
return 1;
}
}
return 0;
}
int ans = 0;
void kuhn(){
int ok = 0;
do{
ok = 0;
memset(viz,0,sizeof(viz));
for(int i=1;i<=n;i++)
if(!st[i]){
int res = dfs(i);
ans += res;
ok |= res;
}
}while(ok);
}
int main(){
cin >> n >> m >> e;
while(e--){
int u,v;
cin >> u >> v;
ad[u].push_back(v);
}
kuhn();
cout << ans << '\n';
for(int i=1;i<=n;i++)
if(st[i])
cout << i << " " << st[i] << "\n";
}