Pagini recente » Cod sursa (job #1929144) | Cod sursa (job #1860449) | Cod sursa (job #1600743) | Cod sursa (job #280741) | Cod sursa (job #1589159)
#include<fstream>
#include<vector>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
const int Nmax = 10001;
vector<int> G[Nmax];
int m[Nmax],r[Nmax],l[Nmax];
int N,M,E;
int addpath(int x){
if(m[x]) return 0;
m[x]=1;
for(vector<int>::iterator it=G[x].begin();it!=G[x].end();++it){
if(!r[*it] || addpath(r[*it])){
l[x]=*it;
r[*it]=x;
return 1;
}
}
return 0;
}
int main(){
in>>N>>M>>E;
int x,y;
for(int i=1;i<=E;i++){
in>>x>>y;
G[x].push_back(y);
}
int p=1;
while(p){
p=0;for(int i=1;i<=N;i++) m[i]=0;
for(int i=1;i<=N;i++) if(!l[i]) p|=addpath(i);
}
int s=0;for(int i=1;i<=N;i++) s+=(l[i]!=0);
out<<s<<'\n';
for(int i=1;i<=N;i++) if(l[i]!=0) out<<i<<' '<<l[i]<<'\n';
return 0;
}