Pagini recente » Cod sursa (job #1671320) | Cod sursa (job #2664595) | Cod sursa (job #1289509) | Cod sursa (job #2600600) | Cod sursa (job #2735255)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
int n, m, e, ans;
int l[10100], r[20100];
bool fr[10100];
vector<vector<int>> adj;
bool chain(int node)
{
if(fr[node])
return 0;
fr[node] = 1;
for(auto it: adj[node])
{
if(r[it] == 0)
{
l[node] = it;
r[it] = node;
//cout << node << ' ' << it << '\n';
return 1;
}
}
for(auto it: adj[node])
{
if(chain(r[it]))
{
l[node] = it;
r[it] = node;
//cout << node << ' ' << it << '\n';
return 1;
}
}
return 0;
}
int main()
{
in >> n >> m >> e;
adj.resize(n + 5);
for(int i = 1; i <= e; i++)
{
int x, y;
in >> x >> y;
adj[x].push_back(n + y);
}
bool ok = 1;
while(ok)
{
//cout << "ITERATION:\n";
memset(fr, 0, sizeof fr);
ok = 0;
for(int i = 1; i <= n; i++)
{
if(!l[i])
{
//cout << "INDEX: " << i << '\n';
ok |= chain(i);
}
}
}
for(int i = 1; i <= n; i++)
if(l[i] != 0)
ans++;
out << ans << '\n';
for(int i = 1; i <= n; i++)
if(l[i] != 0)
out << i << ' ' << l[i] - n << '\n';
return 0;
}