Pagini recente » Cod sursa (job #581604) | Cod sursa (job #927257) | Cod sursa (job #2908519) | Cod sursa (job #663081) | Cod sursa (job #3230290)
#include <iostream>
#include <vector>
#include <cstdio>
#include <map>
#include <queue>
#define pb(x) push_back(x)
using namespace std;
typedef long long ll;
vector<ll>vec[10001];
ll pN[10001],pM[10001],dummy,dist[10001];
ll n,m;
bool BFS(){
queue<ll>q;
for(ll i=1;i<=n;i++)if(pN[i]==dummy)q.push(i),dist[i]=0;else dist[i]=1e15;
dist[dummy]=1e15;
ll x;
while(!q.empty()){
x=q.front();
q.pop();
if(dist[x]<dist[dummy]){
for(ll y:vec[x]){
if(dist[pM[y]]==1e15){
q.push(pM[y]);
dist[pM[y]]=dist[x]+1;
}
}
}
}
return dist[dummy]!=1e15;
}
bool DFS(ll x){
if(x==dummy)return true;
for(ll y:vec[x]){
if(dist[pM[y]]==dist[x]+1){
if(DFS(pM[y])){
pN[x]=y;
pM[y]=x;
return true;
}
}
}
dist[x]=1e15;
return false;
}
void cuplaj(){
ll i;
for(i=1;i<=n;i++)pN[i]=dummy;
for(i=1;i<=m;i++)pM[i]=dummy;
while(BFS()){
for(i=1;i<=n;i++){
if(pN[i]==dummy)DFS(i);
}
}
}
int main(){
freopen("cuplaj.in","r",stdin);freopen("cuplaj.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
ll e,i,j,k,l,x,y;
cin>>n>>m>>e;
dummy=max(n+1,m+1);
for(i=1;i<=e;i++){
cin>>x>>y;
vec[x].pb(y);
}
cuplaj();
ll rez=0;
for(i=1;i<=n;i++)if(pN[i]!=dummy)rez++;
cout<<rez<<'\n';
for(i=1;i<=n;i++)if(pN[i]!=dummy)cout<<i<<' '<<pN[i]<<'\n';
return 0;
}