Pagini recente » Cod sursa (job #79184) | Cod sursa (job #2374169) | Cod sursa (job #941535) | Cod sursa (job #656347) | Cod sursa (job #1955166)
#include <bits/stdc++.h>
using namespace std;
int n,m,e,k;
int l[10012], r[10123];
bool visited[10123];
int maxFlow;
vector <int> adj[12314];
bool PAIR(int vertex){
if(visited[vertex])
return(false);
visited[vertex] = true;
for(unsigned i=0; i<adj[vertex].size(); i++){
if(!r[adj[vertex][i]]){
r[adj[vertex][i]] = vertex;
l[vertex] = adj[vertex][i];
return(1);
}
}
for (unsigned i=0; i<adj[vertex].size(); i++){
if(PAIR(r[adj[vertex][i]])){
l[vertex] = adj[vertex][i];
r[adj[vertex][i]] = vertex;
return(1);
}
}
return(0);
}
void solve(){
bool lp = 1;
while(lp){
lp = 0;
memset(visited,0,sizeof(visited));
for(int i=1;i<=n;i++)
if(!l[i])
lp|=PAIR(i);
}
}
int main(){
freopen ("cuplaj.in", "r", stdin);
freopen ("cuplaj.out", "w", stdout);
scanf("%d%d%d", &n,&m,&e);
for(int i = 0; i < e; i++){
int x,y;
scanf("%d%d", &x, &y);
adj[x].push_back(y);
}
solve();
int ans = 0;
for(int i=1;i<=n;i++)
if(l[i])
ans++;
printf("%d\n", ans);
for(int i=1;i<=n;i++)
if(l[i])
printf("%d %d\n", i, l[i]);
}