http://codeforces.com/problemset/problem/598/D
分析:BFS、接続の周辺エリアと同じですが、あまりにも多くのクエリーTLEを引き起こす可能性がありますので、あなたは、ストレージ・エリアと通信したい答えは、接続されたコンポーネントの隣のクエリが直接結果を得ることができ
1の#include <iostreamの> 2の#include <sstream提供> 3の#include <cstdioを> 4の#include <cstdlib> 5の#include < ストリング > 6の#include <CStringの> 7の#include <アルゴリズム> 8の#include <機能> 9#含む<iomanip> 10の#include <数値> 11の#include <cmath> 12の#include <キュー> 13の#include <ベクトル> 14の#include < 設定 > 15の#include <CCTYPE> 16 CONST ダブル PI = ACOS( - 1.0 )。 17 のconst int型 INF = 0x3f3f3f3f 。 18 CONST INT NINF = -INF - 1 。 19 typedefの長い 長いLL。 20 の#define MOD 1000007 21 使って 名前空間STDを、 22のtypedef対< INT、INT > P。 23 チャーマップ[ 1005 ] [ 1005 ]。 24 int型N、M、ANS、CNT。 25 INT X、Y。 26 int型 DX [ 4] = { 1、0、 - 1、0 }、DY [ 4 ] = { 0、1、0、 - 1 }。 27 INT VIS [ 1005 ] [ 1005 ]; 28 のint NUM [ 1000025 ]。 29の ボイドBFS() 30 { 31 のint I、J。 32 キュー<P> Q。 33 q.push(P(X、Y))。 34 CNT ++ ; 35 VIS [X] [Y] = CNT。 36 ANS = 0 ; 37 一方(q.size()) 38 { 39 Pの一時= q.front()。 40 q.pop()。 41の ANS + = 4 。 42 のために(i = 0 ; iは< 4 ; ++ I) 43 { 44 INT NX = temp.first + DX [I]。 45 INT NY = temp.second + DY [I]。 46 であれば(NX> = 0 && NX <N && NY> = 0 && NY < M) 47 { 48 であれば(地図[NX] [ザ] == ' ' ) 49 { 50 ans-- 。 51 であれば(!可視[NX] [A]) 52 { 53 q.push(P(NX、NY))。 54 VIS [NX] [] = CNT。 55 } 56 } 57 } 58 他59 ans-- 。 60 } 61 } 62 NUM [CNT] = ANS; 63 coutの<< ANS << てendl; 64 } 65 66 のint main()の 67 { 68 INT I、J、K。 69 CIN >> N >> M >> K。 70 のために(i = 0 ; iがn <; ++ I) 71 CIN >> [i]のマップ。 72 のmemset(NUM、 - 1、はsizeof (NUM))。 73 のmemset(VIS、0、はsizeof (VIS))。 74 CNT = 0 。 75 一方(k--) 76 { 77 CIN >> X >> Y。 78 x--、y-- 。 79 であれば(VIS [X] [Y] == 0 ) 80の BFS()。 81 他 82 COUT << NUM [VIS [X] [Y]] << ENDL。 83 } 84 リターン 0 。 85 }