Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define REP( i , n ) for( int i = 0 ; i < n ; ++i )
- #define clr( t , val ) memset( t , val , sizeof( t ) )
- #define pb push_back
- #define all( v ) v.begin() , v.end()
- #define SZ( v ) ((int)v.size())
- #define mp make_pair
- #define fi first
- #define se second
- #define MAXV 1000000
- #define MAXE 1000000
- #define INF (1<<30)
- #define N 50
- typedef long long ll;
- int n , m , s , t , E;
- int to[ 2 * MAXE + 5 ] , cap[ 2 * MAXE + 5 ] , NEXT[ 2 * MAXE + 5 ];
- int last[ MAXV + 5 ] , now[ MAXV + 5 ] , dist[ MAXV + 5 ];
- void add_edge( int u , int v , int uv , int vu = 0 ){
- to[ E ] = v ; cap[ E ] = uv ; NEXT[ E ] = last[ u ] ; last[ u ] = E ++;
- to[ E ] = u ; cap[ E ] = vu ; NEXT[ E ] = last[ v ] ; last[ v ] = E ++;
- }
- bool bfs(){
- REP( i , n ) dist[ i ] = INF;
- queue< int > Q;
- dist[ t ] = 0;
- Q.push( t );
- while( !Q.empty() ){
- int u = Q.front() ; Q.pop();
- for( int e = last[ u ] ; e != -1 ; e = NEXT[ e ] ){
- int v = to[ e ];
- if( cap[ e ^ 1 ] && dist[ v ] >= INF ){
- dist[ v ] = dist[ u ] + 1;
- Q.push( v );
- }
- }
- }
- return dist[ s ] < INF;
- }
- int dfs( int u , int f ){
- if( u == t ) return f;
- for( int &e = now[ u ] ; e != -1 ; e = NEXT[ e ] ){
- int v = to[ e ];
- if( cap[ e ] && dist[ u ] == dist[ v ] + 1 ){
- int ret = dfs( v , min( f , cap[ e ] ) );
- if( ret ){
- cap[ e ] -= ret;
- cap[ e ^ 1 ] += ret;
- return ret;
- }
- }
- }
- return 0;
- }
- ll maxFlow(){
- ll flow = 0;
- while( bfs() ){
- REP( i , n ) now[ i ] = last[ i ];
- while( 1 ){
- int f = dfs( s , INF );
- if( !f ) break;
- flow += f;
- }
- }
- return flow;
- }
- /*
- int main(){
- int u , v , w;
- while( sc( n ) == 1 ){
- sc( m );
- E = 0;
- REP( i , n ) last[ i ] = -1;
- s = 0 , t = n - 1;
- REP( i , m ){
- sc( u ) , sc( v ) , sc( w );
- u-- , v--;
- add_edge( u , v , w , w );
- }
- printf( "%lld\n" , maxFlow() );
- }
- }
- */
- int L[ N + 5 ][ N + 5 ] , U[ N + 5 ][ N + 5 ];
- double X[ N + 5 ][ N + 5 ];
- int main(){
- int cases;
- scanf( "%d" , &cases );
- for( int tc = 0 ; tc < cases ; ++tc ){
- int R , C;
- scanf( "%d%d" , &R , &C );
- clr( L , 0 ) ; clr( U , 0 );
- for( int i = 0 ; i < R ; ++i )
- for( int j = 0 ; j < C ; ++j ){
- scanf( "%lf" , &X[ i ][ j ] );
- L[ i ][ j ] = floor( X[ i ][ j ] );
- U[ i ][ j ] = ceil( X[ i ][ j ] );
- X[ i ][ C ] += X[ i ][ j ];
- X[ R ][ j ] += X[ i ][ j ];
- }
- int n = R + C + 4;
- int s = n - 1 , t = s - 1 , s2 = t - 1 , t2 = s2 - 1;
- vi indRow( R + 1 ) , indCol( C + 1 );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment