Pagini recente » Cod sursa (job #2156151) | Cod sursa (job #583815) | Cod sursa (job #2601837) | Cod sursa (job #1107313) | Cod sursa (job #1217672)
#include<fstream>
#include<vector>
#define pb push_back
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
const int nmax = 10010;
vector<int> g[nmax];
int n,m,edges;
int viz[nmax],f[nmax],used[nmax];
int kuhn(int v)
{
if (viz[v]==1) return 0;
viz[v]=1;
for (int i=0;i<g[v].size();i++)
{
int to=g[v][i];
if (f[to]==-1 || kuhn(f[to]))
{
f[to]=v;
return 1;
}
}
return 0;
}
int main()
{
cin>>n>>m>>edges;
while (edges--)
{
int x,y;
cin>>x>>y;
g[x].pb(y);
}
int k=0,i;
for (i=1;i<=m;i++) f[i]=-1;
for (i=1;i<=n;i++)
{
for (int j=0;j<g[i].size();j++)
if (f[g[i][j]]!=-1)
{
used[i]=1;
f[g[i][j]]=i;
break;
}
}
for (i=1;i<=n;i++)
{
if (used[i]==1) continue;
for (int j=1;j<=n;j++) viz[j]=0;
k+=kuhn(i);
}
k=0;
for (i=m;i>0;i--) if (f[i]!=-1) k++;
cout<<k<<"\n";
for (i=m;i>0;i--) if (f[i]!=-1) cout<<f[i]<<" "<<i<<"\n";
return 0;
}