BoxerTC

Untitled

May 3rd, 2015
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.86 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define REP( i , n ) for( int i = 0 ; i < n ; ++i )
  5. #define clr( t , val ) memset( t , val , sizeof( t ) )
  6.  
  7. #define pb push_back
  8.  
  9. #define all( v ) v.begin() , v.end()
  10. #define SZ( v ) ((int)v.size())
  11.  
  12. #define mp make_pair
  13. #define fi first
  14. #define se second
  15.  
  16. #define MAXV 1000000
  17. #define MAXE 1000000
  18. #define INF (1<<30)
  19. #define N 50
  20.  
  21. typedef long long ll;
  22.  
  23. int n , m , s , t , E;
  24. int to[ 2 * MAXE + 5 ] , cap[ 2 * MAXE + 5 ] , NEXT[ 2 * MAXE + 5 ];
  25. int last[ MAXV + 5 ] , now[ MAXV + 5 ] , dist[ MAXV + 5 ];
  26. void add_edge( int u , int v , int uv , int vu = 0 ){
  27.     to[ E ] = v ; cap[ E ] = uv ; NEXT[ E ] = last[ u ] ; last[ u ] = E ++;
  28.     to[ E ] = u ; cap[ E ] = vu ; NEXT[ E ] = last[ v ] ; last[ v ] = E ++;
  29. }
  30. bool bfs(){
  31.     REP( i , n ) dist[ i ] = INF;
  32.     queue< int > Q;
  33.     dist[ t ] = 0;
  34.     Q.push( t );
  35.     while( !Q.empty() ){
  36.         int u = Q.front() ; Q.pop();
  37.         for( int e = last[ u ] ; e != -1 ; e = NEXT[ e ] ){
  38.             int v = to[ e ];
  39.             if( cap[ e ^ 1 ] && dist[ v ] >= INF ){
  40.                 dist[ v ] = dist[ u ] + 1;
  41.                 Q.push( v );
  42.             }
  43.         }
  44.     }
  45.     return dist[ s ] < INF;
  46. }
  47. int dfs( int u , int f ){
  48.     if( u == t ) return f;
  49.     for( int &e = now[ u ] ; e != -1 ; e = NEXT[ e ] ){
  50.         int v = to[ e ];
  51.         if( cap[ e ] && dist[ u ] == dist[ v ] + 1 ){
  52.             int ret = dfs( v  , min( f , cap[ e ] ) );
  53.             if( ret ){
  54.                 cap[ e ] -= ret;
  55.                 cap[ e ^ 1 ] += ret;
  56.                 return ret;
  57.             }
  58.         }
  59.     }
  60.     return 0;
  61. }
  62. ll maxFlow(){
  63.     ll flow = 0;
  64.     while( bfs() ){
  65.          
  66.         REP( i , n ) now[ i ] = last[ i ];
  67.         while( 1 ){
  68.             int f = dfs( s , INF );
  69.             if( !f ) break;
  70.             flow += f;
  71.         }
  72.     }
  73.     return flow;
  74. }
  75. /*
  76. int main(){
  77.     int u , v , w;
  78.     while( sc( n ) == 1 ){
  79.         sc( m );
  80.         E = 0;
  81.         REP( i , n ) last[ i ] = -1;
  82.         s = 0 , t = n - 1;
  83.         REP( i , m ){
  84.             sc( u ) , sc( v ) , sc( w );
  85.             u-- , v--;
  86.             add_edge( u , v , w , w );
  87.         }
  88.         printf( "%lld\n" , maxFlow() );
  89.     }
  90. }
  91. */
  92. int L[ N + 5 ][ N + 5 ] , U[ N + 5 ][ N + 5 ];
  93. double X[ N + 5 ][ N + 5 ];
  94.  
  95. int main(){
  96.     int cases;
  97.     scanf( "%d" , &cases );
  98.     for( int tc = 0 ;  tc < cases ; ++tc ){
  99.         int R , C;
  100.         scanf( "%d%d" , &R , &C );
  101.         clr( L , 0 ) ; clr( U , 0 );
  102.         for( int i = 0 ; i < R ; ++i )
  103.             for( int j = 0 ; j < C ; ++j ){
  104.                 scanf( "%lf" , &X[ i ][ j ] );
  105.                 L[ i ][ j ] = floor( X[ i ][ j ] );
  106.                 U[ i ][ j ] = ceil( X[ i ][ j ] );
  107.                 X[ i ][ C ] += X[ i ][ j ];
  108.                 X[ R ][ j ] += X[ i ][ j ];
  109.             }
  110.        
  111.         int n = R + C + 4;
  112.         int s = n - 1 , t = s - 1 , s2 = t - 1 , t2 = s2 - 1;
  113.         vi indRow( R + 1 ) , indCol( C + 1 );
  114.        
  115.     }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment