Pagini recente » Cod sursa (job #1686522) | Cod sursa (job #283884) | Cod sursa (job #1234594) | Cod sursa (job #32924) | Cod sursa (job #2233752)
#pragma GCC optimize ("O3")
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define dbg(x) cout << #x << '=' << x << '\n';
#define ll long long
#define pi pair<int,int>
#define pl pair<ll,ll>
#define pd pair<double,double>
#define ld long double
#define pld pair<ld,ld>
#define lg length()
#define sz size()
#define pb push_back
#define MAXN 100005
#define INF 1000000005
#define LINF 1000000000000000005
#define x1 xdddddddddddddddddd
#define y1 ydddddddddddddddddd
int n,m,e,f[240005],c[200005],x,y,z,p[20005],k[20005];
vector <pi> g[20005];
int32_t main(){
ios_base :: sync_with_stdio(0); cin.tie(); cout.tie();
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
cin >> n >> m >> e;
for(int i=1;i<=e;i++){
cin >> x >> y;
g[x].pb({n+y,i});
g[n+y].pb({x,e+i});
c[i]=1;
}
for(int i=1;i<=n;i++){
g[0].pb({i,2*e+i});
g[i].pb({0,2*e+n+i});
c[2*e+i]=1;
}
for(int i=1;i<=m;i++){
g[n+i].pb({n+m+1,2*e+2*n+i});
g[n+m+1].pb({n+i,2*e+2*n+m+i});
c[2*e+2*n+i]=1;
}
int gd=0;
do{
gd=0;
for(int i=1;i<=n+m+1;i++) p[i]=-1,k[i]=0;
queue <int> q;
q.push(0);
while(q.sz){
int t=q.front();
q.pop();
for(pi i : g[t]){
if(p[i.x]==-1 && i.x && i.x!=n+m+1 && f[i.y]<c[i.y]){
q.push(i.x);
p[i.x]=t;
k[i.x]=i.y;
}
}
}
for(int i=n+1;i<=n+m;i++){
int s=2*e+n+i;
if(p[i]!=-1 && f[s]<c[s]){
gd=1;
int fl=c[s]-f[s],t=i;
while(t){
fl=min(fl,c[k[t]]-f[k[t]]);
t=p[t];
}
t=i;
f[s]+=fl;
while(t){
f[k[t]]+=fl;
t=p[t];
}
}
}
}while(gd);
int ans=0;
for(int i=1;i<=m;i++){
ans+=f[2*e+2*n+i];
}
cout << ans << '\n';
for(int i=1;i<=n;i++){
for(pi j : g[i]){
if(f[j.y]){
cout << i << ' ' << j.x-n << '\n';
}
}
}
}