【SCOI2015】小さな凸状マトリックスを再生

フェイス質問

https://www.luogu.org/problem/P4251

問題の解決策

// luogu-判定部イネーブル-O2 
の#include <iostreamの> 
する#include <cstdioを> 
する#include <CStringの> 
する#include <ベクトル> 
の#include <アルゴリズム>
 の#define RIレジスタint型
 の#define N 300 使用して名前空間STDを、int型読み取り(){
   int型 RET = 0、F = 0チャー CH = GETCHAR()。
  一方、(CH < ' 0 ' || CH> ' 9 ')は、f | =(CH == ' - ')、CH = GETCHAR()。
  

 

一方、(CH> = ' 0 ' && CH <= ' 9 ')RET = RET * 10 +(CH- ' 0 ')、CH = GETCHAR()。
  リターン F - ?RET:RET; 
} 

int型、M、N、K、ティム、ANS [N]。
INT VA [N] [N]。
ベクター < INT > 乃至[N]。
INT VIS [N]、一致[N]。

BOOL DFS(INT X){
   ため(RI i = 0 ; iが<[X] .size(); iは++ ){
     int型、Y = に[X] [I];
    もし(VIS [Y] == TIM)続け; 
    VIS [Y] = ティム。
    もし(!一致[Y] || DFS(一致[Y])){ 
      一致[Y] =のX。
      リターン 1 ; 
    } 
  } 
  戻り 0 
} 

int型のチェック(INT X){
   ため(RI i = 1 ; I <= N; iが++ )への[I] .clear(); 
  memset(一致、0はsizeof (一致))。
  memsetの(VIS、0はsizeof (VIS))。
  以下のために(RI iが= 1 ; iが<= N; iは++ のため(RI J = 1 ; J <= Mであり、j ++)場合(VA [i]は[J] <= X)[i]を.push_back(j)に、
  ティム = 0 ; int型 CNT = 0 ;
  (RI i = 1 ; iが<= N iが++ ){
     ++ ティム。
    もし(DFS(i))をCNT ++ ; 
  } 
  戻りCNT。
} 

int型のmain(){ 
  
  N)=(読み取り; M =読み取ります(); K = リード()。
  K = N-K + 1 (RI i = 1 ; I <= N; I ++ のための(RI J = 1; J <= Mであり、j ++)VA [I] [Jは= 読み取ります();
  int型ポンド= 0、RB = 1E9;
  int型 RET = RB;
  一方、(LB <= RB){
     int型ミッド=(LB + RB)>> 1 もし(チェック(MID)> = K)RET =中間、RB =半ば1ポンド=ミッド+ 1 ; 
  } 
  のprintf(" %d個の\ n " 、RET)。
  リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/shxnb666/p/11278641.html