тема Портал
Проблема решения идеи:
Половина ответа, то BFS проверки, если вы можете охватить все другие знаки от дорожного знака, то ответ возможно. Знает, где можно найти самый лучший ответ.
AC код:
1 #include <iostream> 2 #include <cstdio> 3 #include <CMATH> 4 #include <CString> 5 #include <очереди> 6 7 с использованием пространства имен станд; 8 9 INT м, п, а [ 501 ] [ 501 ], L, R, пит, сумма, ANS, в середине; 10 INT дх [] = {- 1 , 1 , 0 , 0 }, Dy [] = { 0 , 0 , 1 , - 1 }; 11 BOOL отношению [ 501 ] [ 501], v [ 501 ] [ 501 ], флаг, с; 12 13 инлайн BOOL проверка ( INT Len, INT х, INT у) { 14 очереди < INT > д, q 1; 15 q.push (х); 16 q1.push (у); 17 v [х] [у] = 1 ; 18 в то время как (! {Q.empty ()) 19 х = q.front (); 20 у = q1.front (); 21 q.pop (); 22 q1.pop (); 23 , если( по отношению [х] [у] == 1 ) Num ++ ; 24 , если (число == сумма) возвращают верно ; 25 для ( INT I = 0 ; г < 4 ; я ++ ) { 26 INT хх = х + дх [I]; 27 INT уу = у + Dy [I]; 28 , если (ABS (а [хх] [уу] - это [х] [у])> LEN) продолжить ; 29 , если (хх < 1 || хх> т || уу < 1 || уу> п) продолжить ; 30 , если (! V [хх] [уу]) { 31 q.push (хй); 32 q1.push (уу); 33 v [хх] [уу] = 1 ; 34 } 35 } 36 } 37 возвращение ложным ; 38 } 39 40 INT основных () { 41 INT х, у; 42 зсапЕ ( " % d% d " , & м, & п); 43 для ( INT I = 1 ; я <= т; я ++ ) 44 для ( INT J = 1; J <= п; j ++ ) { 45 зсапЕ ( " % d " , & [I] [J]); 46 г = тах (г, а [I] [J]); 47 } 48 для ( INT I = 1 ; я <= т; я ++ ) 49 для ( INT J = 1 , J <= N; j ++ ) { 50 INT и; 51 зсапЕ ( " % d " , & и); 52 , если (и == 1 ) 53 по отношению [I] [J] =1 , сумма ++, х = х, у = J; 54 } 55 , а (л < г) { 56 среднего = (L + R) / 2 ; 57 MemSet (v, 0 , SizeOf (v)); 58 флаг = ложь ; 59 Num = 0 ; 60 , если (проверка (середина, х, у)) 61 г = середина, ANS = середина; 62 еще 63 л = середина + 1 ; 64 } 65 Е ( " % d" , Год); 66 возвращения 0 ; 67 }