Pagini recente » Cod sursa (job #1577865) | Cod sursa (job #2701461) | Cod sursa (job #1035240) | Cod sursa (job #3160355) | Cod sursa (job #2781351)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("cuplaj.in");
ofstream fout("cuplaj.out");
int n, m, k;
vector<int>v[10005];
int rgt[10005];
int lft[10005];
int vis[10005];
bool Cuplaj(int i)
{
//cout << i << " " << rgt[i] << " " << vis[i] << "\n";
if(vis[i])
return false;
vis[i] = 1;
for(auto x: v[i])
{
if(lft[x] == 0)
{
rgt[i] = x;
lft[x] = i;
return true;
}
}
for(auto x: v[i])
{
if(Cuplaj(lft[x]))
{
rgt[i] = x;
lft[x] = i;
return true;
}
}
return false;
}
void Citire()
{
int x, y;
fin >> n >> m >> k;
for(int i = 1; i <= k; i++)
{
fin >> x >> y;
v[x].push_back(y);
}
}
int main()
{
int answer = 0;
bool hasPath = true;
Citire();
while(hasPath)
{
for(int i = 1; i <= n; i++)
vis[i] = 0;
hasPath = false;
for(int i = 1; i <= n; i++)
{
if(rgt[i] == 0 && Cuplaj(i))
{
answer++;
hasPath = true;
}
// cout << "--------------\n";
}
}
fout << answer << "\n";
for(int i = 1; i <= n; i++)
if(rgt[i])
fout << i << " " << rgt[i] << "\n";
return 0;
}