CodeForces 1105D Kilani 및 게임
주제 링크 : Kilani 및 게임에서
주제 효과 : 당신은 n 개의 * 분의지도를주고,지도 P-국가, 각 국가는 자신의 성,지도에서 디지털 디스플레이를 가지고, 각 국가는 바깥쪽으로 확장됩니다
그러나 각 확장에서 가장 확장 [나는] 단위, 라운드 각 국가 성 마지막 번호를 물어 교대로
주제 아이디어 : 그 바깥쪽으로 확장, 당신은 성을 각각 확장 BFS를 사용할 수있다 각 성의 가능성을 생각하지만,이 라인에 각 확장 성, 그래서 우리는 구조를 사용
X를 저장하려면, Y는, 단계는 단계 팽창은 여러 번이고, 각 국가마다 라운드 팽창 모서리이므로 BFS에 그 에지 위치를 저장하고, [] 필요성의 징조
그것
/ * 이 코드 Dev5.11에 경고이다 * / #INCLUDE <비트 / STDC ++ H.> 은 USING 공간 STD는, 타입 정의 긴 롱 ; LL CONST INT MAXN = 1000 + 5. ; INT N-, m, P, VIS [MAXN [MAXN, ANS [MAXN 같이, S는 [MAXN] 숯불 ; A [MAXN] MAXN] 구조체 노드 { INT의 X는, Y는, STEP; }; 큐 <노드> Boder [ 10 ], Q는, int로 디렉터리의 [를 4 ] [ 2 ] = { 1 , 0 - 1 , 0, 0 , 1 , 0 , - 1 }; 무효 BFS ( INT 사람) { 노드의 tmp; INT의 X, Y; 동안 (! q.empty ()) { TMP = q.front (); q.pop (); 경우 (tmp.step의 == 0 ) boder [누가] .push (TMP); 또 { 위해 ( int로 I = 0 ; i가 < 4 ; i가 ++ ) { X = tmp.x DIR + [I] [ 0 ]; Y = + tmp.y 디렉터리 [I] . 1 ] IF (X < . 1 || Y < . 1 ! || X> N- || Y> m || A [X] [Y] = ' . ' || ! VIS [X]는 [Y] = 0 ) 계속 ; VIS [X] [Y] = WHO; q.push (노드 {X, Y, tmp.step - 1. }); // 여기 표시 인큐 확장했다 단계에 필요한 -1; } } } 반환 ; } BOOL 확장 ( INT WHO) { 노드의 tmp를, 그동안 (!Boder [WHO] .empty ()) { TMP = Boder [WHO] .front (); // 이러한 확장에 대한 공통 대기열 각 나라의 가장자리 Boder을 [WHO] .pop (); tmp.step =에서 S [WHO]; q.push (TMP) } BFS (); 반환 ! Boder [] .empty (); } INT 의 main () { 는 scanf ( " %의 D %의 D %의의 D " , 및 N-, m, P) 에 대한 ( INT I = 1. ; I <= P; I ++)는 scanf ( " %의 D " , S [I]) 에 대한 ( INT I = . 1 I <= N-; I는 ++)는 scanf ( "%의 S " , A [I] + 1이다. ) 에 대한 ( INT I = 1. ; I <= N-; I는 ++ ) { 대 ( INT J = 1. , J <= m; J ++ ) { IF (A [I] [J ]> = ' 0 ' && A [I] [J] <= ' 0 ' + P) { INT NUM = A [I] [J] - ' 0 ' ; Boder [NUM] .push (노드 {I, J, S [NUM]}) // 제 과정 각국 것 인큐 boder VIS [I] [J] = NUM; } } } 그동안 ( 1. ) { BOOL OK = false로 , 대한 ( INT I = 1. 나는 <= P, 나는 ++ ) OK | = 확장 (I); // 국가의 각 라운드에 대한 열거 확장 결과,이 경우 라운드 한 나라의 확장, 그것은 긍정적 다음 확인, 다음 라운드가 IF (! OK) BREAK ; } 에 대한 ( INT I = . 1 ; I <= N- I ++ ) 에 대한 ( INT J = 1. , J <= m ; J ++ ) ANS [VIS [I] [J] ++; 대 ( INT I =1 ; I <= P; 내가 ++ ) 의 printf ( " %의 D " , ANS [I]); 반환 0 ; }