Pagini recente » Cod sursa (job #2482965) | Cod sursa (job #296501) | Cod sursa (job #939529) | Cod sursa (job #3169860) | Cod sursa (job #1011347)
#include<cstring>
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream eu("cuplaj.in");
ofstream tu("cuplaj.out");
#define Nmax 10005
vector<int>G[Nmax];
int l[Nmax],r[Nmax];
bool use[Nmax];
bool pairup(int n)
{
if(use[n])
return false;
use[n]=true;
for(vector<int>:: iterator it=G[n].begin();it!=G[n].end();it++)
if(!r[*it])
{
l[n]=*it;
r[*it]=n;
return true;
}
for(vector<int>:: iterator it=G[n].begin();it!=G[n].end();it++)
if(pairup(r[*it]))
{
l[n]=*it;
r[*it]=n;
return true;
}
return false;
}
int main()
{
int N,M,E,x,y;
eu>>N>>M>>E;
while(E--)
{
eu>>x>>y;
G[x].push_back(y);
}
bool ok=true;
while(ok)
{
ok=false;
memset(use,0,sizeof(use));
for(int i=1;i<=N;i++)
if(!l[i])
ok|=pairup(i);
}
int cuplaj=0;
for(int i=1;i<=N;i++)
if(l[i]>0)
cuplaj++;
tu<<cuplaj<<"\n";
for(int i=1;i<=N;i++)
if(l[i]>0)
tu<<i<<" "<<l[i]<<"\n";
return 0;
}