Pagini recente » Cod sursa (job #456471) | Cod sursa (job #187857) | Cod sursa (job #836025) | Cod sursa (job #740976) | Cod sursa (job #1652664)
#include <fstream>
#include <vector>
#include <string.h>
#define nMax 10009
#define pb push_back
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int L, R, m, u[nMax], l[nMax], r[nMax];
vector<int> G[nMax];
void read()
{
int x, y;
fin>>L>>R>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y;
G[x].pb(y);
}
}
bool pairup(int node)
{
if(u[node])
return 0;
u[node]=1;
for(vector<int>::iterator it=G[node].begin();it!=G[node].end();it++)
{
if(!r[*it])
{
l[node]=*it;
r[*it]=node;
return 1;
}
}
for(vector<int>::iterator it=G[node].begin();it!=G[node].end();it++)
{
if(pairup(r[*it]))
{
l[node]=*it;
r[*it]=node;
return 1;
}
}
return 0;
}
void solve()
{
for(int change=1;change;)
{
change=0;
memset(u, 0, sizeof(u));
for(int i=1;i<=L;i++)
if(!l[i])
change |= pairup(i);
}
}
void write()
{
int Sol=0;
for(int i=1;i<=L;i++)
Sol+=(l[i]>0);
fout<<Sol<<'\n';
for(int i=1;i<=L;i++)
{
if(l[i])
fout<<i<<" "<<l[i]<<'\n';
}
}
int main()
{
read();
solve();
write();
return 0;
}