Pagini recente » Cod sursa (job #1440869) | Cod sursa (job #1312078) | Cod sursa (job #2970945) | Cod sursa (job #1796838) | Cod sursa (job #245826)
Cod sursa(job #245826)
#include<stdio.h>
#include<string.h>
#include<vector>
#define N 2003
#define INF 2000000
using namespace std;
long tata[N], q[N], s, d, n, m;
bool c[N][N];
vector<long> a[N];
long bfs(){
long x,p,u,i,ok=0;
memset(tata,0,(n+m+3)*sizeof(long));
q[0]=s;tata[s]=1;
for (p=0,u=0;p<=u;p++){
x=q[p];
for (i=0;i<a[x].size();i++)
if (!tata[a[x][i]] && c[x][a[x][i]]>0){
if (a[x][i]==d){ ok=1;continue;}
q[++u]=a[x][i],tata[a[x][i]]=x;
}
}
return (ok);
}
int main(){
long flux=0, w, x, y, i, j;
freopen("cuplaj.in","r",stdin);freopen("cuplaj.out","w",stdout);
scanf("%ld %ld %ld",&n,&m,&w);
for (;w>0;w--){
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[n+m+1][i]=1;
a[n+m+1].push_back(i);a[i].push_back(n+m+1);
}
for (i=1;i<=m;i++) {
c[n+i][n+m+2]=1;
a[n+i].push_back(n+m+2);a[n+m+2].push_back(n+i);
}
s=n+m+1;d=n+m+2;
while (bfs()){
for (w=0;w<a[d].size();w++)
if (tata[a[d][w]]){
c[a[d][w]][d]-=1;c[d][a[d][w]]+=1;
for (i=a[d][w];i!=s;i=tata[i])
c[tata[i]][i]-=1,c[i][tata[i]]+=1;
flux++;
}
}
printf("%ld\n",flux);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (c[n+j][i]==1) printf("%ld %ld\n", i,j);
return 0;
}