Pagini recente » Cod sursa (job #2605296) | Cod sursa (job #840895) | Cod sursa (job #750741) | Cod sursa (job #1374607) | Cod sursa (job #931650)
Cod sursa(job #931650)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
#define Nmax 20005
vector <int> graf[Nmax];
int n, m, e, maxC, ok;
int st[Nmax], dr[Nmax], used[Nmax];
void read(){
int u, v;
scanf("%i %i %i", &n, &m, &e);
for(int i = 1; i <= e; ++i){
scanf("%i %i", &u, &v);
graf[u].push_back(v);
}
fclose(stdin);
}
int cupleaza(int node){
int v;
if(used[node]) return 0;
used[node] = 1;
for(int i = 0, size = graf[node].size(); i < size; ++i){
v = graf[node][i];
if(!dr[v] || cupleaza(dr[v])){
st[node] = v;
dr[v] = node;
return 1;
}
}
return 0;
}
void solve(){
ok = 1;
while(ok){
ok = 0;
memset(used, 0, sizeof(used));
for(int i = 1; i <= n; ++i){
if(!st[i])
if(cupleaza(i)) ++maxC, ok = 1;
}
}
}
void write(){
printf("%i\n", maxC);
for(int i = 1; i <= n; ++i)
if(st[i])
printf("%i %i\n", i, st[i]);
fclose(stdout);
}
int main(){
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
read();
solve();
write();
return 0;
}