Pagini recente » Cod sursa (job #704348) | Cod sursa (job #2604596) | Cod sursa (job #300218) | Cod sursa (job #1126996) | Cod sursa (job #373741)
Cod sursa(job #373741)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream fi("cuplaj.in");
ofstream fo("cuplaj.out");
vector<int> G[10010];
int sel[10010],st[10010],dr[10010],STEP=0,N,M,E;
int pairUp(int x){
if (sel[x]==STEP) return 0;
sel[x]=STEP;
for (vector<int>::iterator it=G[x].begin();it!=G[x].end();++it)
if (!st[*it]) { st[*it]=x; dr[x]=*it; return 1; }
for (vector<int>::iterator it=G[x].begin();it!=G[x].end();++it)
if (pairUp(st[*it])) { st[*it]=x; dr[x]=*it; return 1; }
return 0;
}
int main(){
fi>>N>>M>>E;
int x,y;
for (int i=1;i<=E;++i){
fi>>x>>y;
G[x].push_back(y);
}
memset(sel,0,sizeof(sel));
memset(st,0,sizeof(st));
memset(dr,0,sizeof(dr));
for (int ok=1;ok;){
ok=0;
++STEP;
for (int i=1;i<=N;++i) if (!dr[i]) ok|=pairUp(i);
}
int sol=0;
for (int i=1;i<=N;++i) if (dr[i]) ++sol;
fo<<sol<<"\n";
for (int i=1;i<=N;++i) if (dr[i]) fo<<i<<" "<<dr[i]<<"\n";
fi.close();fo.close();
return 0;
}