Pagini recente » Cod sursa (job #2331555) | Cod sursa (job #2232467) | Cod sursa (job #976808) | Cod sursa (job #242701) | Cod sursa (job #2434276)
#include <bits/stdc++.h>
#define MAX (int)(1e4+5)
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,ans,px[MAX],py[MAX];
vector <int> Edge[MAX];
bool used[MAX];
void read();
void solve();
void print();
bool dfs(int);
int main(){
read();
solve();
print();
return 0;
}
bool dfs(int x){
used[x]=1;
for(auto it:Edge[x]){
if(py[it] == 0 || (!used[py[it]] && dfs(py[it]))){
py[it]=x;
px[x]=it;
return true;
}
}
return false;
}
void solve(){
int i, ok;
do{ ok=0;
memset(used,0,sizeof(used));
for(i=1;i<=n;++i)
if(!used[i]&&!px[i])
ok+=dfs(i);
ans+=ok;
}while(ok);
}
void print(){
int i;
fout<<ans<<'\n';
for(i=1;i<=n;++i)
if(px[i])
fout<<i<<' '<<px[i]<<'\n';
}
void read(){
int i,m,q,x,y;
fin>>n>>m>>q;
for(i=0;i<q;++i){
fin>>x>>y;
Edge[x].push_back(y);
}
}