Pagini recente » Cod sursa (job #526725) | Atasamentele paginii Clasament vacanta_11_3 | Cod sursa (job #3277364) | Concursuri organizate de infoarena | Cod sursa (job #515974)
Cod sursa(job #515974)
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 cuplaj=0;
while(ok)
{
ok=0;
for(i=0;i<=S;i++) viz[i]=0;
for(i=1;i<=S;i++)
if(!r[i])
if(dfs(i))
{
cuplaj++;
ok=1;
}
}
cout<<cuplaj<<"\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;
}