Pagini recente » Cod sursa (job #1002924) | Cod sursa (job #1098246) | Cod sursa (job #1601401) | Cod sursa (job #1115235) | Cod sursa (job #1283589)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
const int N = 10010;
const int M = 100010;
ifstream F("cuplaj.in");
ofstream G("cuplaj.out");
int n,m,e,co;
vector<int> v[N];
int pl[N],pr[N],mark[N];
int pair_up(int x)
{
if ( pr[x] == 0 )
return 1;
int y = pr[x];
if ( mark[y] == 1 )
return 0;
mark[y] = 1;
for (int j=0;j<int(v[y].size());++j)
if ( pair_up(v[y][j]) )
{
pl[y] = v[y][j];
pr[v[y][j]] = y;
return 1;
}
return 0;
}
int main()
{
F>>n>>m>>e;
for (int i=1,x,y;i<=e;++i)
{
F>>x>>y;
v[x].push_back(y);
}
for (int i=1;i<=n;++i)
{
memset(mark,0,sizeof(mark));
for (int j=0;j<int(v[i].size());++j)
if ( pair_up(v[i][j]) )
{
pl[i] = v[i][j];
pr[v[i][j]] = i;
++co;
break;
}
}
G<<co<<'\n';
for (int i=1;i<=n;++i)
if ( pl[i] != 0 )
G<<i<<' '<<pl[i]<<'\n';
}