これは非常に単純な検索トピックです、私は最終的に考え出しこれは夜になり、私以外にも他の人のためのものです。
まず、それはあなたが届くことができますどのように多くのポイント尋ね、最大1つは必要ありませ後戻りと再帰境界がすべてを完了するために許可されている理由を説明している、いくつかのポイントを通過することはできません。時間の複雑さは、5E8のO(+ 4000 1000)* 100000に達する可能性があるため、そこで彼は、その後、プログラム、およびTLEの三点を書きました。実際には、中国聯通は長い間、書き込みどこでも問題に解決策を回すためにブロックを使用することが知られているが、最終的に私は、鉱山を発見したdalao誰感謝だけでなく、LYXのディスカッションボードと二つの大きな人の兄弟。まず第一に、我々は二つの点ユニコム、二つの点が同じで到達するためのポイント数限り知っている必要があります - 私たちはわずか数ブロックユニコムを検索する必要があり、その後、格子枠の家ユニコムブロックの数が到達することができます中国聯通は、格子ブロックの数が含まれています!その後、我々は、次に、あるいは彼ことがk個のレコードを次にチャイナユニコムブロックの数、各ユニコムブロックの格子NUM [k]はレコードの数、ブック[X] [Y]はチャイナユニコムのブロックは、彼が属していることを示し、= 0、必要彼を検索++ K、トラバースされていません。
1.&空間的複雑さは、慎重に時間を計算しなければなりません
2.問題を正しく理解し、常にバックテンプレートを設定していない、この問題の結果,,,
3.ユニコムブロックはマスターが、前提条件を注意することは、思考が内のブロックの数と同じではありません
4.学習は、また、それは難しいことではありません見つけるために戻って壊れにくいがあります
コードは(少し形而上学は次のいずれかの後に90〜100の大規模な配列を開くことです)
#include <ビット/ STDC ++ H.> 使用して 名前空間STD; int型N-、M; int型ブック[ 1005 ] [ 1005 ]; char型 MP [ 1005 ] [ 1005 ]; int型 ANS [ 1000005 ]、NUM [ 1000005 ]; // 保存ここで、格子ユニコム応答ブロックの数、及びブロックユニコム INT K = 0 ; // ブロックユニコムの数 int型 STEP = 1 ; int型のDX [ 4 ] = { 0、 - 1、0、1 }; // 右下左上 int型 DY [ 4 ] = { 1、0、 - 1、0 }。 ボイド DFS(int型のx、int型の Y、int型K){ ブック[X] [Y] = K。 以下のために(int型 i = 0 ; iが<= 3 ; I ++ ){ int型 TX = DX [I] + X。 INTの TY = DY [i]を+ Y。 もし(MP [TX] [TY]!= 融点[X] [Y]){ 場合(TX> 0 && TY> 0 && TX <= N && TY <= N &&ブック[TX] [TY] == 0){ STEP ++; // 格子番号++ DFS(TX、TY、K); // ダウン検索を続ける } } } } int型のmain(){ CIN >> N- M; のための(int型私は= 1 ; I <= N; I ++は){読み取る// ため(INT J = 1 J <= N; J ++ ){ CIN >> MP [I]、[J]; ブック[I] [J] = 0 ; } } のための(INT I = 1; iが<= N; iは++ ){ ため(int型の J = 1 ; J <= nであり、j ++ ){ 場合(ブック[I] [J] == 0 ){ K ++ 。 ステップ = 1 。 DFS(I、J、K)。 NUM [K] = ステップと } } } のために(int型 I = 1 ; I <= M; iは++ ){ int型X、Y。 CIN >> X >> Y。 ANS [I] = NUM [ブック[X] [Y]。 } ため(int型 iは= 1 ; I <= M iは++ ){ COUT << ANS [I] << ENDL。 } 戻り 0 。 }