Pagini recente » Cod sursa (job #212658) | Cod sursa (job #1770471) | Cod sursa (job #144111) | Cod sursa (job #1733653) | Cod sursa (job #343599)
Cod sursa(job #343599)
#include<fstream>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=10005;
const char iname[]="cuplaj.in";
const char oname[]="cuplaj.out";
ifstream f(iname);
ofstream g(oname);
vector<int> A[maxn];
int i,l[maxn],r[maxn],n,m,e;
bool passed[maxn];
bool go(int x)
{
if(passed[x])
return false;
passed[x]=1;
for(vector<int>::iterator it=A[x].begin();it!=A[x].end();++it)
if(!r[*it])
{
r[*it]=x;
l[x]=*it;
return 1;
}
for(vector<int>::iterator it=A[x].begin();it!=A[x].end();++it)
if(go(r[*it]))
{
r[*it]=x;
l[x]=*it;
return 1;
}
return 0;
}
int main()
{
f>>n>>m>>e;
int x,y;
for(i=1;i<=e;++i)
{
f>>x>>y;
A[x].push_back(y);
}
int ok=1;
while(ok)
{
ok=0;
memset(passed,false,sizeof(passed));
for(i=1;i<=n;++i)
if(!l[i])
ok|=go(i);
}
int many=0;
for(i=1;i<=n;++i)
many+=(l[i]>0);
g<<many<<"\n";
for(i=1;i<=n;++i)
if(l[i])
g<<i<<" "<<l[i]<<"\n";
f.close();
g.close();
return 0;
}