Pagini recente » Cod sursa (job #2335113) | Cod sursa (job #3251438) | Cod sursa (job #3291445) | Cod sursa (job #3205698) | Cod sursa (job #418892)
Cod sursa(job #418892)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int N, M, E;
int R[10001], L[10001];
bool U[10001];
vector<int> G[100001];
int pairUp(int nod) {
if(U[nod]) return 0;
U[nod]=1;
for(vector<int>::iterator it=G[nod].begin(); it!=G[nod].end(); it++) {
if(!R[(*it)]) {
L[nod]=(*it);
R[(*it)]=nod;
return 1;
}
}
for(vector<int>::iterator it=G[nod].begin(); it!=G[nod].end(); it++) {
if(pairUp(R[*it])) {
L[nod]=(*it);
R[(*it)]=nod;
return 1;
}
}
return 0;
}
int main() {
fstream f1, f2;
int i, j, p, q, ok=1;
f1.open("cuplaj.in", ios::in);
f1>>N>>M>>E;
for(i=1; i<=E; i++) {
f1>>p>>q;
G[p].push_back(q);
}
f1.close();
while(ok) {
ok=0;
memset(U, 0, sizeof(U));
for(i=1; i<=N; i++) {
if(!L[i]) {
if(pairUp(i)) {
ok=1;
}
}
}
}
int c=0;
for(i=1; i<=N; i++) {
if(L[i]) { c++; }
}
f2.open("cuplaj.out", ios::out);
f2<<c<<endl;
for(i=1; i<=N; i++) {
if(L[i]) { f2<<i<<" "<<L[i]<<endl; }
}
f2.close();
return 0;
}