Pagini recente » Cu calu' la JBOI | Borderou de evaluare (job #3201578) | Cod sursa (job #1486149) | Borderou de evaluare (job #1242104) | Cod sursa (job #2428530)
#include <bits/stdc++.h>
#define dbg(x) cerr<<#x": "<<x<<"\n"
#define dbg_p(x) cerr<<#x": "<<x.first<<","<<x.second<<"\n"
#define dbg_v(x, n) do{cerr<<#x"[]: ";for(int _=0;_<n;++_)cerr<<x[_]<<" ";cerr<<'\n';}while(0)
#define dbg_ok cerr<<"OK!\n"
#define DMAX 1
#define NMAX 1
#define MMAX 1
using namespace std;
int n, k, x,m,e,u,v;
vector<int> vx[10001],vy[10001];
int viz[10001], px[10001], py[10001];
bool dfs(int n)
{
viz[n]=1;
for (auto v: vx[n])
if (py[v]==0||(!viz[py[v]]&&dfs(py[v])))
{
px[n]=v;
py[v]=n;
return true;
}
return false;
}
int main()
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
ios_base::sync_with_stdio(false);
cin >> n >> m >> e;
for (int i=1;i<=e;i++) {
cin>>u>>v;
vx[u].push_back(v);
vy[v].push_back(u);
}
int ok = 1, ans = 0;
while (ok) {
ok = 0;
memset(viz,0, sizeof(viz));
for (int i=1;i<=n;i++)
if (viz[i]==0 && !px[i]) {
ok += dfs(i);
ans += ok;
}
}
// for(int i = 1; i <= n; i++)
// if(px[i])
// ans++;
cout << ans << '\n';
for(int i = 1; i <= n; i++)
if(px[i])
cout << i << ' ' << px[i] << '\n';
return 0;
}