Pagini recente » Cod sursa (job #2671645) | Cod sursa (job #3241646) | Cod sursa (job #2704440) | Cod sursa (job #1625372) | Cod sursa (job #515980)
Cod sursa(job #515980)
using namespace std;
#include<iostream>
#include<fstream>
#include<vector>
#define pb push_back
#define nmax 10001
vector<int> G[nmax];
int l[nmax],r[nmax],viz[nmax];
int S,D,M;
ofstream fout("cuplaj.out");
bool dfs(int x)
{
if(viz[x]==1) return 0;
viz[x]=1;
vector<int>::iterator it;
for(it=G[x].begin();it<G[x].end();it++)
if(!l[*it])
{
l[*it]=x;
r[x]=*it;
return 1;
}
for(it=G[x].begin();it<G[x].end();it++)
if(dfs(l[*it]))
{
l[*it]=x;
r[x]=*it;
return 1;
}
return 0;
}
void solve()
{int i;
int ok=1;
int flow=0;
while(ok)
{
ok=0;
for(i=0;i<=S;i++) use[i]=0;
for(i=1;i<=S;i++)
if(!r[i])
if(pairup(i)) ok=1,++flow;
}
fout<<flow<<"\n";
for(i=1;i<=S;i++)
if(r[i]) fout<<i<<" "<<r[i]<<"\n";
}
void cit()
{
int i,x,y;
ifstream fin("cuplaj.in");
fin>>S>>D>>M;
for(i=1;i<=M;i++)
{
fin>>x>>y;
G[x].pb(y);
}
fin.close();
}
int main()
{
cit();
solve();
fout.close();
return 0;
}