Pagini recente » Profil StarGold2 | Cod sursa (job #611482) | Cod sursa (job #2435748) | Cod sursa (job #2814939) | Cod sursa (job #2740388)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector<vector<int>> s(10001);
vector<vector<int>> d(10001);
vector<int> l(10001);
vector<int> r(10001);
vector<bool> viz(10001);
int rez;
bool pairup(int nod){
if(viz[nod])return 0;
viz[nod]=1;
for(auto v:s[nod]){
if(r[v]==-1){
r[v]=nod;
l[nod]=v;
return 1;
}
}
for(auto v:s[nod]){
if(pairup(r[v])){
r[v]=nod;
l[nod]=v;
return 1;
}
}
return 0;
}
int main(){
int n,m,e;
in>>n>>m>>e;
for(int i=0;i<e;i++){
int x,y;
in>>x>>y;
s[x].push_back(y);
d[y].push_back(x);
}
for(int i=1;i<=n;i++){
l[i]=-1;
}
for(int i=1;i<=m;i++){
r[i]=-1;
}
while(true){
int t=rez;
for(int i=1;i<=n;i++)if(l[i]==-1)rez+=pairup(i);
for(int i=1;i<=n;i++)viz[i]=0;
if(t==rez)break;
}
out<<rez<<"\n";
for(int i=1;i<=n;i++){
if(l[i]!=-1){
out<<i<<" "<<l[i]<<"\n";
}
}
}