Pagini recente » Cod sursa (job #472361) | Cod sursa (job #2660212) | Cod sursa (job #700896) | Cod sursa (job #1904208) | Cod sursa (job #2721082)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int n,m,l,st[10005],dr[10005];
bool fost[10005];
vector<int>vecini[10005];
bool pairup(int nod)
{
if(fost[nod]) return 0;
fost[nod]=1;
for(int i=0;i<vecini[nod].size();i++)
{
int x=vecini[nod][i];
if(!dr[x]){
st[nod]=x;
dr[x]=nod;
return 1;
}
}
for(int i=0;i<vecini[nod].size();i++)
{
int x=vecini[nod][i];
if( pairup(dr[x]) ){
st[nod]=x;
dr[x]=nod;
return 1;
}
}
return 0;
}
int main()
{
f>>n>>m>>l;
for(int i=1;i<=l;i++)
{
int x,y;
f>>x>>y;
vecini[x].push_back(y);
}
bool schimbat=1;
while(schimbat)
{
schimbat=0;
for(int i=1;i<=n;i++)
fost[i]=0;
for(int i=1;i<=n;i++)
if( !st[i] ) schimbat|=pairup(i);
}
int cuplaj=0;
for(int i=1;i<=n;i++) if( st[i]!=0 ) cuplaj++;
g<<cuplaj<<'\n';
for(int i=1;i<=n;i++)
if( st[i]!=0 ) g<<i<<' '<<st[i]<<'\n';
}