Pagini recente » Cod sursa (job #2200089) | Cod sursa (job #1915249) | Cod sursa (job #2336546) | Cod sursa (job #1715690) | Cod sursa (job #1758144)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define NMAX 10005
int degA[ NMAX ],
degB[ NMAX ],
vizt[ NMAX ],
ordi[ NMAX ],
peri[ NMAX ];
vector < int > v[ NMAX ];
bool cmp1( int a, int b );
bool cmp2( int a, int b );
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int n, m, i, j, x, y, a, b, s;
s = 0;
scanf("%d%d%d",&a,&b,&m);
while( m-- ){
scanf("%d%d",&x,&y);
v[ x ].push_back( y );
degA[ x ]++;
degB[ y ]++;
}
for( i = 1; i <= a; ++i ){
sort( v[ i ].begin(), v[ i ].end(), cmp2 );
ordi[ i ] = i;
}
sort( ordi + 1, ordi + 1 + a, cmp1 );
for( i = 1; i <= a; ++i ){
for( j = 0; j < v[ ordi[ i ] ].size(); ++j ){
if( !vizt[ v[ ordi[ i ] ][ j ] ] ){
s++;
peri[ ordi[ i ] ] = v[ ordi[ i ] ][ j ];
vizt[ v[ ordi[ i ] ][ j ] ] = 1;
}
}
}
printf("%d\n",s);
for( i = 1; i <= a; ++i ){
if( peri[ i ] ) printf("%d %d\n",i,peri[ i ]);
}
return 0;
}
bool cmp1( int a, int b ){
return degA[ a ] < degA[ b ];
}
bool cmp2( int a, int b ){
return degB[ a ] < degB[ b ];
}