Pagini recente » Cod sursa (job #331473) | Cod sursa (job #1942698) | Cod sursa (job #1929027) | Cod sursa (job #2728574) | Cod sursa (job #1241305)
#include <fstream>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
ifstream F("cuplaj.in");
ofstream G("cuplaj.out");
const int N = 10010;
int n,m,e,mk[N],l[N],r[N];
vector<int> v[N];
bool good(int x)
{
if ( x == 0 ) return 1;
mk[x] = 1;
for (int i=0;i<int(v[x].size());++i)
{
int y = v[x][i];
if ( !mk[r[y]] )
if ( good(r[y]) )
{
l[x] = y;
r[y] = x;
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);
}
int ans = 0;
bool ok = 1;
while ( ok )
{
ok = 0;
memset(mk,0,sizeof(mk));
for (int i=1;i<=n;++i)
if ( !mk[i] && l[i] == 0 )
if ( good(i) )
{
++ans;
ok = 1;
}
}
G<<ans<<'\n';
for (int i=1;i<=n;++i)
if ( l[i] )
G<<i<<' '<<l[i]<<'\n';
}