Cod sursa(job #1964383)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 13 aprilie 2017 13:20:50
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#import<bits/stdc++.h>
using namespace std;
const int N=10005;vector<int>G[N];int x,y,n,m,e,i,V[N],R[N],L[N],v[N],E;bool F=1;
bool B(int x){if(V[x])return 0;V[x]=1;int i=0,l=G[x].size(),y;for(;i<l;i++){y=G[x][i];if(R[y]==0){L[x]=y,R[y]=x;return 1;}}
for(i=0;i<l;i++){y=G[x][i];if(R[y]&&B(R[y])){L[x]=y,R[y]=x;return 1;}}return 0;}
ifstream f("cuplaj.in");ofstream g("cuplaj.out");main(){
for(f>>n>>m>>e;e--;){f>>x>>y;G[x].push_back(y);}
while(F){F=0;memset(V,0,sizeof(V));
for (i=1;i<=n;i++)if(L[i]==0)F|=B(i);}
for(i=1;i<=n;i++)if(L[i])v[++E]=i;for(i=1,g<<E<<'\n';i<=E;i++)g<<v[i]<<' '<<L[v[i]]<<'\n';}