Pagini recente » Cod sursa (job #602663) | Cod sursa (job #1939888) | Cod sursa (job #1163730) | Cod sursa (job #67706) | Cod sursa (job #562438)
Cod sursa(job #562438)
#include<cstdio>
#include<vector>
#define FOR for(it=v[nod].begin();it!=v[nod].end();it++)
#define For for(int i=1;i<=n;i++)
#define IO freopen("cuplaj.in","r",stdin);freopen("cuplaj.out","w",stdout);
using namespace std;
void read(),solve();
int n,m,e,C,S[10010],D[10010],V[10010],creste(int),OK();
vector<int> v[10010];
int main()
{
read();
solve();
return 0;
}
void read()
{
int x,y;
IO scanf("%d%d%d",&n,&m,&e);
for(;e;e--){scanf("%d%d",&x,&y);v[x].push_back(y);}
}
void solve()
{
for(;OK(););printf("%d\n",C);For if(D[i])printf("%d %d\n",i,D[i]);
}
int OK()
{
int ret=0;For V[i]=0;For if(!D[i]&&creste(i)){C++;ret=1;} return ret;
}
int creste(int nod)
{
vector<int>::iterator it;if(V[nod])return 0;V[nod]=1;
FOR if(!S[*it]){D[nod]=*it;S[*it]=nod;return 1;}
FOR if(creste(S[*it])){D[nod]=*it;S[*it]=nod;return 1;}
return 0;
}