Pagini recente » Cod sursa (job #549874) | Cod sursa (job #3336209) | Cod sursa (job #3304265) | Cod sursa (job #528662) | Cod sursa (job #3334313)
#include <fstream>
#include <vector>
#include <unordered_map>
#define NM 10000
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
bool viz[NM+1];
int n,m,e,x,y,l[NM],r[NM];
unordered_map<int, vector<int>> muchii;
int dfs(int nod){
if(viz[nod]) return 0;
viz[nod]=1;
for(auto i:muchii[nod]){
if(r[i]==0){
r[i]=nod;
l[nod]=i;
return 1;
}
}
for(auto i:muchii[nod]){
if(dfs(r[i])){
r[i]=nod;
l[nod]=i;
return 1;
}
}
return 0;
}
int main(){
cin>>n>>m>>e;
for(int i=1;i<=e;i++){
cin>>x>>y;
muchii[x].push_back(y);
}
bool ok=0;
do {
ok=0;
for(int i=1;i<=n;i++)viz[i]=0;
for(int i=1;i<=n;i++)
if(l[i]==0)
ok|=dfs(i);
} while (ok);
int ras=0;
for(int i=1;i<=n;i++)
if(l[i])
ras++;
cout<<ras<<"\n";
for(int i=1;i<=n;i++)
if(l[i])
cout<<i<<" "<<l[i];
}