Pagini recente » Cod sursa (job #1558568) | Cod sursa (job #1559962) | Cod sursa (job #532351) | Cod sursa (job #170098) | Cod sursa (job #246314)
Cod sursa(job #246314)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<vector>
using namespace std;
#define N 3096
#define INF 100000000
vector<long> a[N];
long q[N], tata[N], n, nr, sol[N] ;
bool c[N][N];
inline int bfs(){
long x,p,u,j,ok=0;
memset(tata,0,N * sizeof(long));
q[0]=1;tata[1]=1;nr=0;
for (p=0,u=0;p<=u;p++){
x=q[p];
for (j=0;j<a[x].size();j++)
if (c[x][a[x][j]]>0 &&!tata[a[x][j]]){
if (a[x][j]==n){ ok=1; continue; }
tata[a[x][j]]=x,q[++u]=a[x][j];
}
}
return (ok);
}
int main (){
long x,y,e,flux=0,i,m,min,w;
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%ld %ld %ld",&n,&m,&e);
for (i=1 ; i<=e ; i++){
scanf("%ld %ld",&x,&y);
c[x][n+y]=1;
a[x].push_back(n+y);
a[n+y].push_back(x);
}
for(i=1 ; i <= n ; i++) {
c[0][i] = 1;
a[0].push_back(i);
a[i].push_back(0);
}
for(i=n+1 ; i<=n+m;i++) {
c[i][n+m+1] = 1;
a[i].push_back(n+m+1);
a[n+m+1].push_back(i);
}
while (bfs()){
min=INF;
for (w=0;w<a[n].size();w++)
if (tata[a[n][w]]){
min=c[a[n][w]][n];
//for (i=a[n][w];i!=1;i=tata[i])
// if (c[tata[i]][i]<min) min=c[tata[i]][i];
c[a[n][w]][n]-=min;c[n][a[n][w]]+=min;
for (i=a[n][w];i!=1;i=tata[i]) c[tata[i]][i]-=min,c[i][tata[i]]+=min;
flux+=min;
}
}
printf("%ld\n",flux);
return 0;
}