Pagini recente » Cod sursa (job #2376056) | Cod sursa (job #1538949) | Cod sursa (job #1602034) | Cod sursa (job #1657678) | Cod sursa (job #1469739)
using namespace std;
#include<vector>
#include<fstream>
#define MAXN 10005
FILE *f=fopen ("cuplaj.in","r");
FILE *g=fopen ("cuplaj.out","w");
int n,m;
vector <int> G[MAXN];
int l[MAXN],r[MAXN],u[MAXN];
int pairup (int x)
{
if(u[x]) return 0;
u[x]=1;
vector <int> :: iterator it;
for(it=G[x].begin(); it!=G[x].end(); it++)
if(!r[*it])
{
l[x]=*it;
r[*it]=x;
return 1;
}
for(it=G[x].begin(); it!=G[x].end(); it++)
if(pairup(r[*it]))
{
l[x]=*it;
r[*it]=x;
return 1;
}
return 0;
}
int main()
{
int cnt_edges,i,x,y;
fscanf(f,"%d%d%d",&n,&m,&cnt_edges);
while(cnt_edges--)
{
fscanf(f,"%d%d",&x,&y);
G[x].push_back(y);
}
int change=1;
while(change)
{
change=0;
for(i=1; i<=n; i++) u[i]=0;
for(i=1; i<=n; i++)
if(!l[i]) change |= pairup(i);
}
int cuplaj=0;
for(i=1; i<=n; i++) cuplaj+= (l[i]>0);
fprintf(g,"%d\n",cuplaj);
for(i=1; i<=n; i++) if(l[i])
fprintf(g,"%d %d\n",i,l[i]);
return 0;
}