Pagini recente » Cod sursa (job #1169464) | Cod sursa (job #2656214) | Cod sursa (job #2643401) | Cod sursa (job #3261494) | Cod sursa (job #2691403)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
int n,m,source,dest,l[10005],r[10005],n1,n2,viz[10005],ans;
vector<int> graf[10005];
bool match(int node)
{
if (viz[node])
return false;
viz[node] = true;
for (auto it: graf[node])
{
if (r[it] == -1)
{
l[node] = it;
r[it] = node;
return true;
}
}
for (auto it: graf[node])
{
if (match(r[it]))
{
l[node] = it;
r[it] = node;
return true;
}
}
return false;
}
int main()
{
memset(l,-1,sizeof(l));
memset(r,-1,sizeof(r));
in>>n1>>n2>>m;
for(int i=0;i<m;i++)
{
int a,b;
in>>a>>b;
a--;b--;
graf[a].push_back(b);
}
int ok = 1;
while (ok)
{
ok = 0;
memset(viz,0,sizeof(viz));
for(int i=0;i<n1;i++)
if (l[i] == -1 && match(i)){
ok = 1;
ans++;
}
}
out<<ans<<'\n';
for(int i=0;i<n1;i++)
if(l[i] != -1)
out<<i+1<<' '<<l[i]+1<<endl;
return 0;
}