Pagini recente » Cod sursa (job #1498736) | Cod sursa (job #1961767) | Cod sursa (job #1896764) | Cod sursa (job #301855) | Cod sursa (job #995835)
Cod sursa(job #995835)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
typedef vector<int>::iterator vit;
vector<int> ve[10001];
int lf[10001],rt[10001];
bool u[10001];
bool pairup(const int n){
if(u[n]) return 0;
u[n]=1;
for(vit it=ve[n].begin();it!=ve[n].end();it++)
if(!rt[*it]){
rt[*it]=n;
lf[n]=*it;
return 1;
}
for(vit it=ve[n].begin();it!=ve[n].end();it++)
if(pairup(rt[*it])){
rt[*it]=n;
lf[n]=*it;
return 1;
}
return 0;
}
int main()
{
int n,m,k;
f>>n>>m>>k;
while(k--){
int x,y;
f>>x>>y;
ve[x].push_back(y);
}
int ok=1;
while(ok){
ok=0;
memset(u,0,sizeof(u));
for(int i=1;i<=n;i++)
if(!lf[i])
ok|=pairup(i);
}
int s=0;
for(int i=1;i<=n;i++)
s+=(bool)lf[i];
g<<s<<'\n';
for(int i=1;i<=n;i++)
if(lf[i])
g<<i<<" "<<lf[i]<<'\n';
return 0;
}