Pagini recente » Cod sursa (job #1128371) | Cod sursa (job #114021) | Cod sursa (job #2709035) | Cod sursa (job #1927835) | Cod sursa (job #2378517)
#include <bits/stdc++.h>
#define Nmax 10001
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int N,M,E;
list <int> G[Nmax];
bool vis[Nmax];
int vL[Nmax];
int vR[Nmax];
bool match(int node){
if(vis[node])
return false;
vis[node]=true;
for(const auto &it:G[node])
if(!vL[it]){
vL[it]=node;
vR[node]=it;
return true;
}
for(const auto &it:G[node])
if(match(vL[it])){
vL[it]=node;
vR[node]=it;
return true;
}
return false;
}
int main(){
f>>N>>M>>E;
for(int x,y,i=1;i<=E;i++){
f>>x>>y;
G[x].push_back(y);
}
bool ok=true;
while(ok){
ok=false;
memset(vis,0,sizeof(vis));
for(int i=1;i<=N;i++)
if(!vR[i] and match(i))
ok=true;
}
int ans=0;
for(int i=1;i<=N;i++)
if(vR[i])
++ans;
g<<ans<<'\n';
for(int i=1;i<=N;i++)
if(vR[i])
g<<i<<' '<<vR[i]<<'\n';
return 0;
}