Pagini recente » Cod sursa (job #1283849) | Cod sursa (job #1840949) | Cod sursa (job #433501) | Monitorul de evaluare | Cod sursa (job #2221652)
#include<fstream>
#include<cstring>
#include<vector>
using namespace std;
vector<int> g[10005];
int viz[10005],n,m,x,y;
int l[10005], r[10005];
bool cupleaza(int nod) {
if (viz[nod]) return 0;
viz[nod]=1;
//attempt 1
for (int i=0; i<g[nod].size(); ++i)
if (l[g[nod][i]]==0) {
r[nod]=g[nod][i];
l[g[nod][i]]=nod;
return 1;
}
//attempt 2
for (int i=0; i<g[nod].size(); ++i)
if ( cupleaza(l[g[nod][i]] ) ) {
r[nod]=g[nod][i];
l[g[nod][i]]=nod;
return 1;
}
return 0;
}
int main(void) {
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
int e;
cin>>n>>m>>e;
for (int i=1; i<=e; ++i) {
cin>>x>>y;
g[x].push_back(y);
}
bool ok=1;
while (ok) {
ok=0;
for (int i=1; i<=n; ++i)
if (r[i]==0) ok|=cupleaza(i);
memset(viz,0,sizeof(viz));
}
int cpmax=0;
for (int i=1; i<=n; ++i)
if (r[i]!=0) cpmax++;
cout<<cpmax<<"\n";
for (int i=1; i<=n; ++i)
if (r[i]!=0) cout<<i<<" "<<r[i]<<"\n";
return 0;
}