Pagini recente » Cod sursa (job #537424) | Cod sursa (job #702612) | Cod sursa (job #1716623) | Cod sursa (job #2705057) | Cod sursa (job #2705071)
#include<iostream>
#include<fstream>
#include<vector>
#include<cstring>
#include<map>
#include<algorithm>
#include<set>
#include<deque>
#include<queue>
#define FAST cin.tie(NULL); ios_base::sync_with_stdio(false);
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
const int mx=10010;
int n,m,k;
vector<int> g[mx];
bool used[mx],used1[mx];
int mt[mx];
void read(){
fin>>n>>m>>k;
for(int i=0;i<mx;i++){
mt[i]=-1;
}
int p,q;
for(int i=0;i<k;i++){
fin>>p>>q;
p--;q--;
g[p].push_back(q);
}
}
bool kuhn(int node){
if(used[node]){
return false;
}
used[node]=true;
for(int next:g[node]){
if(mt[next]==-1 || kuhn(mt[next])){
mt[next]=node;
return true;
}
}
return false;
}
void solve(){
for(int i=0;i<n;i++){
for(int next:g[i]){
if(mt[next]==-1){
mt[next]=i;
used1[i]=true;
break;
}
}
}
for(int i=0;i<n;i++){
if(used1[i])
continue;
for(int k=0;k<n;k++){
used[k]=false;
}
kuhn(i);
}
vector<std::pair<int,int>> result;
for(int i=0;i<m;i++){
if(mt[i]!=-1){
result.push_back({mt[i]+1,i+1});
}
}
fout<<result.size()<<endl;
for(auto pr:result)
fout<<pr.first<<" "<<pr.second<<'\n';
}
int main(){
FAST
read();
solve();
return 0;
}