Pagini recente » Cod sursa (job #1375744) | Cod sursa (job #2480731) | Cod sursa (job #113499) | Cod sursa (job #1718252) | Cod sursa (job #185974)
Cod sursa(job #185974)
#include <cstdio>
#include <queue>
#define NX 210
#define INF 0x3f3f3f3f
using namespace std;
int a[ NX ][ NX ], cap[ NX ][ NX ];
int pi[ NX ], dist[ NX ];
bool col[ NX ];
queue< int > Q;
int N, S, T;;
void cit() {
int i, j;
scanf( "%d", &N );
for( i = 1; i <= N; i++ )
for( j = 1; j <= N; j++ )
scanf( "%d", &a[i][j + N] ),
a[j+N][i] = -a[i][j+N],
cap[i][j+N] = 1;
S = 0, T = 2*N + 1;
for( i = 1; i <= N; i++ )
cap[S][i] = 1,
cap[i+N][T] = 1;
N = T;
}
int flow() {
int i, u, v, fl = 0;
while( 1 ) {
for( i = 0; i <= N; i++ )
pi[i] = -1, dist[i] = INF;
while( !Q.empty() )
Q.pop();
pi[S] = -2, dist[S] = 0, col[S] = 1;
Q.push( S );
while( !Q.empty() ) {
u = Q.front(), Q.pop();
col[ u ] = 0;
for( i = 0; i <= N; i++ )
if( cap[u][i] )
if( dist[i] > dist[u] + a[u][i] ) {
dist[i] = dist[u] + a[u][i];
pi[i] = u;
if( col[i] == 0 )
col[i] = 1, Q.push(i);
}
}
if( pi[T] == -1 )
break;
for( v = T, u = pi[T]; u >= 0; v = u, u = pi[u] )
cap[u][v]--, cap[v][u]++,
fl += a[u][v];
}
return fl;
}
void scr() {
printf( "%d\n", flow() );
}
int main() {
freopen( "cc.in", "r", stdin );
freopen( "cc.out", "w", stdout );
cit();
scr();
return 0;
}