Pagini recente » Cod sursa (job #2752279) | Cod sursa (job #1736263) | Cod sursa (job #1639095) | Cod sursa (job #1356744) | Cod sursa (job #2471245)
#include<fstream>
#include<cstring>
#include<vector>
using namespace std;
#define maxn 10005
#define FORI(i,v) for (vector <int>::iterator i= (v).begin(); i != (v).end(); ++i)
vector <int> v[maxn];
int l[maxn],r[maxn],u[maxn];
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
int pairup( int n){
if(u[n]) return 0;
u[n]=1;
FORI(i,v[n])
if(!r[*i]){
l[n]=*i;
r[*i]=n;
return 1;
}
FORI(i,v[n])
if(pairup(r[*i])){
l[n]=*i;
r[*i]=n;
return 1;
}
return 0;
}
int main(){
int x,y,change=1,cuplaj=0,n,m,edges;
cin>>n>>m>>edges;
while(edges){
cin>>x>>y;
v[x].push_back(y);
edges--;
}
while(change){
change=0;
memset(u,0,sizeof(u));
for(int i=1; i<=n; i++)
if(!l[i])
change|=pairup(i);
}
for(int i=1; i<=n; i++)
cuplaj+=(l[i]>0);
cout<<cuplaj<<'\n';
for(int i=1; i<=n; i++)
if(l[i]>0)
cout<<i<<' '<<l[i]<<'\n';
return 0;
}