Pagini recente » Cod sursa (job #492517) | Cod sursa (job #1091869) | Cod sursa (job #3281947) | Cod sursa (job #3271639) | Cod sursa (job #1668866)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
const int nmx = 10002;
int ns,nd,l,d[nmx],s[nmx];
bool viz[nmx];
vector <int> g[nmx];
void citire() {
scanf("%d %d %d", &ns, &nd, &l);
int nod1,nod2;
for(int i = 1; i <= l; ++i) {
scanf("%d %d", &nod1, &nod2);
g[nod1].push_back(nod2);
}
}
bool schimba(int i) {
if(viz[i])
return 0;
viz[i] = 1;
for(vector<int>::iterator it = g[i].begin(); it != g[i].end(); ++it)
if(not d[*it]) {
d[*it] = i;
s[i] = *it;
return 1;
}
for(vector<int>::iterator it = g[i].begin(); it != g[i].end(); ++it)
if(schimba(d[*it])) {
d[*it] = i;
s[i] = *it;
return 1;
}
return 0;
}
void rezolvare() {
bool change = 1;
while(change) {
change = 0;
memset(viz,0,sizeof(viz));
for(int i = 1; i <= ns; ++i)
if(not s[i])
change |= schimba(i);
}
}
void afish() {
int sol = 0;
for(int i = 1; i <= ns; ++i)
if(s[i])
++ sol;
printf("%d\n", sol);
for(int i = 1; i <= ns; ++i)
if(s[i])
printf("%d %d\n", i, s[i]);
}
int main() {
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
citire();
rezolvare();
afish();
return 0;
}