Pagini recente » Cod sursa (job #1548359) | Cod sursa (job #954473) | Cod sursa (job #2789538) | Cod sursa (job #1458633) | Cod sursa (job #1451660)
#include<fstream>
#include<vector>
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
const int N = 10002;
int n,k,i,j,m;
vector<int> g[N];
vector<int> L(N,0), R(N,0), used(N,0);
int dfs(int v)
{
if (used[v]) return 0;
used[v]=1;
for (int i=0;i<g[v].size();i++)
{
int to=g[v][i];
if (!R[to] || dfs(R[to]))
{
R[to]=v;
L[v]=to;
return 1;
}
}
return 0;
}
int main()
{
cin>>n>>k>>m;
while (m--)
{
int x,y;
cin>>x>>y;
g[x].push_back(y);
}
for (i=1;i<=n;i++)
for (j=0;j<g[i].size();j++)
if (R[g[i][j]]==0)
{
R[g[i][j]]=i;
L[i]=g[i][j];
break;
}
for (i=1;i<=n;i++)
{
if (L[i]) continue;
used.assign(n+1,0);
dfs(i);
}
int ans=0;
for (i=1;i<=n;i++)if (L[i])ans++;
cout<<ans<<'\n';
for (i=1;i<=n;i++)if (L[i]) cout<<i<<' '<<L[i]<<'\n';
return 0;
}