Pagini recente » Cod sursa (job #2664107) | Cod sursa (job #843827) | Cod sursa (job #626600) | Cod sursa (job #2668715) | Cod sursa (job #2603920)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
const int N = 10005;
bool viz[N];
int L[N],R[N];
vector<int> v[N];
bool Match(int x)
{
if (viz[x])
return 0;
viz[x] = 1;
for (auto it: v[x])
if (!R[it])
{
R[it] = x;
L[x] = it;
return 1;
}
for (auto it: v[x])
if (Match(R[it]))
{
R[it] = x;
L[x] = it;
return 1;
}
return 0;
}
int main()
{
int n,m,e;
in >> n >> m >> e;
for (int i = 1; i<=e; i++)
{
int x,y;
in >> x >> y;
v[x].push_back(y);
}
bool ok = 1;
while (ok)
{
ok = 0;
memset(viz,0,sizeof(viz));
for (int i = 1; i<=n; i++)
if (!L[i])
ok|=Match(i);
}
int cnt = 0;
for (int i = 1; i<=n; i++)
cnt+=(L[i]>0);
out << cnt << "\n";
for (int i = 1; i<=n; i++)
if (L[i])
out << i << " " << L[i] << "\n";
}