Pagini recente » Rating mutu costina (mutu_costina) | Cod sursa (job #697483) | Istoria paginii runda/tractoare2 | Cod sursa (job #2815736) | Cod sursa (job #1023592)
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> G[10005];
int st[10005];
int dr[10005];
bool viz[10005];
int pair_up(int u)
{
if(viz[u]) return 0;
viz[u]=true;
for(vector<int>::iterator it=G[u].begin();it!=G[u].end();it++)
if(!dr[*it])
{
st[u]=*it;
dr[*it]=u;
return 1;
}
for(vector<int>::iterator it=G[u].begin();it!=G[u].end();it++)
if(dr[*it] && pair_up(dr[*it]))
{
st[u]=*it;
dr[*it]=u;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int cuplaj=0,N,M,K;bool flag;
scanf("%d%d%d",&N,&M,&K);
for(int x,y,i=1;i<=K;i++)
{
scanf("%d%d",&x,&y);
G[x].push_back(y);
}
do
{
flag=true;
memset(viz,false,sizeof viz);
for(int i=1;i<=N;i++)
if(!st[i] && pair_up(i))
{
flag=false;
cuplaj++;
}
}while(!flag);
printf("%d\n",cuplaj);
for(int i=1;i<=N;i++)
if(st[i])
printf("%d %d\n",i,st[i]);
return 0;
}