Pagini recente » Istoria paginii grigore-moisil-2017/clasament/11-12 | Cod sursa (job #2382163) | Istoria paginii grigore-moisil-2017/clasament/10 | Cod sursa (job #2006614) | Cod sursa (job #1335401)
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
vector<int> v[10010];
int viz[10010],n,m,nr,i,a,b,dr[10010],st[10010];
int cuplaj(int x)
{
if(viz[x])
return 0;
viz[x]++;
for(vector<int>::iterator it=v[x].begin();it!=v[x].end();it++)
{
if(!dr[*it])
{
dr[*it]=x;
st[x]=*it;
return 1;
}
}
for(vector<int>::iterator it=v[x].begin();it!=v[x].end();it++)
{
if(cuplaj(dr[*it]))
{
dr[*it]=x;
st[x]=*it;
return 1;
}
}
return 0;
}
int main()
{
f>>n>>m>>nr;
for(i=1;i<=nr;i++)
{
f>>a>>b;
v[a].push_back(b);
}
int ok=1;
while(ok)
{
memset(viz,0,sizeof(viz));
ok=0;
for(i=1;i<=n;i++)
if(!st[i])
ok+=cuplaj(i);
}
for(i=1;i<=n;i++)
if(st[i])
ok++;
g<<ok<<'\n';
for(i=1;i<=n;i++)
if(st[i])
g<<i<<" "<<st[i]<<'\n';
return 0;
}