Pagini recente » Cod sursa (job #2390931) | Cod sursa (job #261421) | Cod sursa (job #2748278) | Cod sursa (job #1337015) | Cod sursa (job #3268957)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector <int> d[10005],dr[10005];
vector <pair<int,int>> ans;
int n,m,e,x,y,mt[10005],l[10005];
bool ok=1,viz[10005];
bool khun(int k)
{
if(viz[k])
return 0;
viz[k]=1;
for(auto it : d[k])
if(mt[it]==-1 || khun(mt[it]))
{
l[k]=it;
mt[it]=k;
return 1;
}
return 0;
}
int main()
{
fin>>n>>m>>e;
for(int i=1; i<=e; i++)
{
fin>>x>>y;
d[x].push_back(y);
}
for(int i=1; i<=n; i++)
l[i]=-1;
for(int i=1; i<=m; i++)
mt[i]=-1;
while(ok)
{
ok=0;
for(int i=1; i<=n; i++)
viz[i]=0;
for(int i=1; i<=n; i++)
if(l[i]==-1)
ok|=khun(i);
}
for(int i=1; i<=m; i++)
if(mt[i]>0)
ans.push_back({mt[i],i});
sort(ans.begin(),ans.end());
fout<<ans.size()<<'\n';
for(auto it : ans)
fout<<it.first<<' '<<it.second<<'\n';
return 0;
}