Pagini recente » Cod sursa (job #2835452) | Cod sursa (job #1586610) | Cod sursa (job #1163435) | Rating Negoescu Ioan (John_Kappa) | Cod sursa (job #970716)
Cod sursa(job #970716)
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#include <algorithm>
#include <ctime>
#include <utility>
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
const int MAXN = 100005;
typedef vector<int> Graph[MAXN];
typedef vector<int> :: iterator IT;
Graph G;
vector <int> cuplaj(MAXN), pereche(MAXN);
bitset <MAXN> used;
int n, m, p, sol;
inline bool pairup(int node)
{
if(used[node])
return false;
used[node] = true;
for(IT it = G[node].begin(), fin = G[node].end(); it != fin ; ++ it)
if(!pereche[*it] || pairup(pereche[*it]))
{
cuplaj[node] = *it;
pereche[*it] = node;
return true;
}
return false;
}
int main()
{
cin >> n >> m >> p;
for(int i = 1 ; i <= p ; ++ i)
{
int x, y;
cin >> x >> y;
G[x].push_back(y);
}
for( bool ok ; ok ; )
{
ok = false;
used.reset();
for(int i = 1 ; i <= n ; ++ i)
if(!cuplaj[i])
if(pairup(i))
{
++ sol;
ok = true;
}
}
cout << sol << "\n";
for(int i = 1 ; i <= n ; ++ i)
if(cuplaj[i])
cout << i << " " << cuplaj[i] << "\n";
return 0;
}