Pagini recente » Cod sursa (job #2916944) | Cod sursa (job #2889621) | Cod sursa (job #2321349) | Cod sursa (job #2354772) | Cod sursa (job #2983018)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector <int> v[10001];
int n,m,k,used[10001],ok = 1,gr1[10001],gr2[10001],contor;
int solve(int a)
{
if(used[a])
return 0;
used[a] = 1;
for(int i = 0;i < v[a].size();i++)
{
int x = v[a][i];
if(gr2[x] == 0)
{
gr1[a] = x, gr2[x] = a;
return 1;
}
}
for(int i = 0;i < v[a].size();i++)
{
int x = v[a][i];
if(solve(gr2[x]))
{
gr1[a] = x, gr2[x] = a;
return 1;
}
}
return 0;
}
int main()
{
in>>n>>m>>k;
for(int i = 1;i<=k;i++)
{
int a,b;
in>>a>>b;
v[a].push_back(b);
}
while(ok)
{
ok = 0;
for(int i = 1;i<=max(n,m);i++)
used[i] = 0;
for(int i = 1;i<=n;i++)
if(!gr1[i])
ok += solve(i);
}
for(int i = 1;i<=n;i++)
if(gr1[i])
contor++;
out<<contor<<"\n";
for(int i = 1;i<=n;i++)
if(gr1[i])
out<<i<<" "<<gr1[i]<<"\n";
return 0;
}