Pagini recente » Monitorul de evaluare | Cod sursa (job #3342110) | Cod sursa (job #2664996) | Monitorul de evaluare | Cod sursa (job #2712108)
#include<bits/stdc++.h>
using namespace std;
#define INIT ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define mp make_pair
#define pb push_back
#define ft first
#define sc second
#define ll long long
#define pii pair<int, int>
#define count_bits __builtin_popcount
//#define int ll
int t, n, m,E, k, a[300010], q, l, r;
vector<int> g[40010];
int c[200101][3];
int f[200010][3];
bool v[40010];
pii p[40010];
int fat[40010];
int cuplu[100010];
//graful e gata, a ramas doar augmentarea prin nivelele bfs-ului si traversarea in adancime, corespunzatoare lui Hopkroft-Karp
bool dfs(int s){
if(v[s]){
return false;
}
v[s]=true;
for(int u:g[s]){
if(cuplu[u]==0){
cuplu[u]=s; cuplu[s]=u;
return true;
}
}
for(int u:g[s]){
if(cuplu[u]!=0){
if(dfs(cuplu[u])){
cuplu[s]=u; cuplu[u]=s;
return true;
}
}
}
return false;
}
pii pr[100010];
int32_t main(){
INIT
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
cin>>n>>m>>E;
for(int i=1; i<=E; i++){
int u, v;
cin>>u>>v;
g[u].pb(v+n);
g[v+n].pb(u);
}
while(true){
for(int i=1; i<=n; i++){
v[i]=false;
}
bool b=false;
for(int i=1;i<=n; i++){
if(cuplu[i]==0){
b|=dfs(i);
}
}
if(!b){break;}
}
int res=0;
for(int i=1; i<=n; i++){
if(cuplu[i]!=0){
res++;
}
}
cout<<res<<"\n";
for(int i=1; i<=n; i++){
if(cuplu[i]!=0){
cout<<i<<" "<<(cuplu[i]-n)<<"\n";
}
}
return 0;
}