Pagini recente » Cod sursa (job #2661421) | Cod sursa (job #167791) | Cod sursa (job #405409) | Cod sursa (job #2694128) | Cod sursa (job #2767618)
#include <bits/stdc++.h>
#define NMAX 10005
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int n, m, l[NMAX], r[NMAX], ans, M;
bitset <NMAX> v;
vector <int> edges[NMAX];
bool cupleaza(int nod)
{
if(v[nod])
return 0;
v[nod] = 1;
for(auto k : edges[nod])
if(!r[k])
{
l[nod] = k;
r[k] = nod;
return 1;
}
for(auto k : edges[nod])
if(cupleaza(r[k]))
{
l[nod] = k;
r[k] = nod;
return 1;
}
return 0;
}
int main()
{
f >> n >> m >> M;
for(int i = 1; i <= M; i++)
{
int x, y;
f >> x >> y;
edges[x].push_back(y);
}
bool ok;
do
{
ok = 0;
for(int i = 1; i <= n; i++)
v[i] = 0;
for(int i = 1; i <= n; i++)
if(l[i] == 0)
ok = ok | cupleaza(i);
}while(ok == 1);
for(int i = 1; i <= n; i++)
if(l[i])
ans++;
g << ans << "\n";
for(int i = 1; i <= n; i++)
if(l[i])
g << i << " " << l[i] << "\n";
return 0;
}