Pagini recente » Cod sursa (job #2824331) | Cod sursa (job #1832314) | Cod sursa (job #3001640) | Cod sursa (job #2854757) | Cod sursa (job #964047)
Cod sursa(job #964047)
#include <cstdio>
#include <cstring>
#include <vector>
#define nmax 10001
using namespace std;
int n,m,e,nr;
vector <int> graf[nmax];
int dr[nmax];
int st[nmax];
int viz[nmax];
void read()
{
int x,y;
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&n,&m,&e);
for(int i=1;i<=e;++i)
{
scanf("%d%d",&x,&y);
graf[x].push_back(y);
}
}
int karp(int nod)
{
if(viz[nod]) return 0;
viz[nod] = 1;
for (int i=0;i<graf[nod].size();++i)
if(!dr[graf[nod][i]] || karp(dr[graf[nod][i]])){
st[nod]=graf[nod][i];
dr[graf[nod][i]]=nod;
return 1;
}
return 0;
}
void solve()
{
int ok=1;
while(ok)
{
ok = 0;
for(int i=1;i<=n;++i)
if(!st[i])
if(karp(i)) {ok=1;++nr;}
memset(viz,0,sizeof(viz));
}
}
void write()
{
printf("%d\n",nr);
for(int i=1;i<=n;++i)
if(st[i])
printf("%d %d\n",i,st[i]);
}
int main(){
read();
solve();
write();
return 0;
}