Pagini recente » Cod sursa (job #479335) | Cod sursa (job #2803697) | Cod sursa (job #700000) | Cod sursa (job #1316862) | Cod sursa (job #3242710)
#include <bits/stdc++.h>
using namespace std;
vector<int> g[10001];
vector<int> mt, used, used1;
bool try_kuhn(int v)
{
if(used[v])
return false;
used[v]=true;
for(auto to:g[v])
{
if(mt[to]==-1 || try_kuhn(mt[to]))
{
mt[to]=v;
return true;
}
}
return false;
}
int main()
{
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
int n, k, m;
cin>>n>>k>>m;
mt.resize(k+1);
mt.assign(k+1, -1);
used.resize(n+k+1);
used1.resize(n+1);
for(int i=1, x, y; i<=m; i++)
{
cin>>x>>y;
g[x].push_back(y);
}
int cate=0;
for(int i=1; i<=n; i++)
for(auto x:g[i])
{
if(mt[x]==-1)
{
mt[x]=i;
used1[i]=true;
break;
}
}
vector<pair<int, int>> ans;
for(int i=1; i<=n; i++)
{
if(used1[i])
{
++cate;
continue;
}
used.assign(n+k+1, 0);
if(try_kuhn(i))
{
++cate;
}
}
cout<<cate<<'\n';
for(int i=1; i<=k; i++)
{
if(mt[i]!=-1)
ans.push_back({mt[i], i});
}
sort(ans.begin(), ans.end());
for(auto [a, b]:ans)
cout<<a<<' '<<b<<'\n';
return 0;
}