Pagini recente » Cod sursa (job #1714354) | valicaroom1 | Cod sursa (job #1643344) | Cod sursa (job #2107864) | Cod sursa (job #721387)
Cod sursa(job #721387)
#include <stdio.h>
int n1,n2,**t,m,inf=99999999,NR,sol[2][10000];
void read(){
FILE *f=fopen("cuplaj.in","r");
fscanf(f,"%d %d %d\n",&n1,&n2,&m);
int i,x,y,j;
t=new int * [n1+5];
for(i=0;i<=n1+2;i++){
t[i]=new int [n2+5];
for(j=0;j<=n2+2;j++)
t[i][j]=0;
}
for(i=1;i<=m;i++){
fscanf(f,"%d %d\n",&x,&y);
t[x][y]=1;
t[x][n2+1]++;
}
fclose(f);
}
int minim(){
int i,min=inf;
for(i=1;i<=n1;i++){
if(t[i][n2+1]>0&&min>t[i][n2+1])
min=t[i][n2+1];
}
if(min<inf&&min>0)
return min;
return 0;
}
int find(int min){
for(int i=1;i<=n1;i++)
if(min==t[i][n2+1])
return i;
return 0;
}
void del(int k){
for(int i=1;i<=n1;i++){
if(t[i][k]>0){
t[i][k]=0;
t[i][n2+1]--;
}
}
}
void write(int a,int nr){
for(int i=1;i<=n2;i++){
if(t[a][i]==1){
t[a][i]=0;
del(i);
NR++;
sol[0][NR]=a;
sol[1][NR]=i;
nr--;
if(nr==0){
return;
}
}
}
}
void afis(){
int i,j;
for(i=1;i<=n1;i++){
for(j=1;j<=n2+1;j++)
printf("%d ",t[i][j]);
printf("\n");
}
}
int main(){
read();
// afis();
int min=minim(),k;
while(min){
k=find(min);
write(k,min);
t[k][n2+1]=0;
min=minim();
}
freopen("cuplaj.out","w",stdout);
printf("%d\n",NR);
int i;
for(i=1;i<=NR;i++)
printf("%d %d\n",sol[0][i],sol[1][i]);
fclose(stdout);
return 0;
}