Pagini recente » Cod sursa (job #3328079) | Cod sursa (job #2819271) | Monitorul de evaluare | Borderou de evaluare (job #278551) | Cod sursa (job #2419982)
#include <bits/stdc++.h>
#define nmax 10005
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
using namespace std;
int n, m, e, x, y;
vector<int>g[nmax];
int st[nmax], dr[nmax];
bool viz[nmax];
vector<pii>ans;
bool cup(int nod)
{
if (viz[nod]) return false;
viz[nod] = true;
for (auto x:g[nod])
{
if (!dr[x])
{
st[nod] = x;
dr[x] = nod;
return true;
}
}
for (auto x:g[nod])
{
if (cup(dr[x]))
{
st[nod] = x;
dr[x] = nod;
return true;
}
}
return false;
}
int main()
{
scanf("%d %d %d",&n,&m,&e);
for (int i=1;i<=e;++i)
{
scanf("%d %d",&x,&y);
g[x].pb(y);
}
bool ok = true;
while(ok)
{
ok = false;
memset(viz, 0, sizeof(viz));
for (int i=1;i<=n;++i)
if (!viz[i] && !st[i])
if (cup(i))
ok = true;
}
for (int i=1;i<=n;++i)
if (st[i])
ans.push_back(mp(i,st[i]));
printf("%d\n",ans.size());
for (auto pr:ans)
printf("%d %d\n",pr.first,pr.second);
return 0;
}