[]最短BZOJ1295

分析
困難な問題は何も。
次の2つのポイント間のT障害の最大値が、正しい値が0に障害物が存在しないことを意味することを意味し、Tポイントまで削除することができ、障害物が右の値にあることを意味し、1である行への2つのポイント<= Tとの間の最短経路。

次に列挙ポイント統計的な答え。

#include <ビット/ STDC ++。H>
の#define SC(N)のscanf( "%d個"、&N)
の#define PT(N)のprintf( "%d個の\ n"、N)
の#define担当者(I、B iは= Bを<; Iは++))(iは=にint
の#define VIベクトル<整数>
の#define VLベクター<長い長>
の#define PB一back
の#define INF 0x3f3f3f3f
名前空間stdを使用。
const int型MAXN = 50;
typedefのペア<int型、int型> P;
INT DX [] = {1、-1,0,0}。
int型DY [] = {0,0,1、-1}。
INT G [MAXN] [MAXN]。
INTのN、M、T。
DIS [MAXN] [MAXN] int型。
int型INQ [MAXN] [MAXN]。
ダブルのANS = 0;
ボイドgetans(int型のx、int型のy)は
{
ため(iは++; iがn = <I = 1 INT)
{
(; J <= M; int型のJ = 1 J ++)のために
{
IF(DIS [I] [J] < = T && ANS <
{
ANS = SQRT((IX)*(IX)+(JY)*(JY))。
}
}
}
}
ボイドspfa(int型のx、int型のY)
{
memsetの(DIS、INF、はsizeof(DIS))。
memset(INQ、0、はsizeof(INQ))。
キュー<P> Q;
DIS [X] [Y] = G [X] [Y]。
q.push(P(X、Y))。
INQ [X] [Y]は1 =。
(!q.empty())、一方
、{
P TMP = q.front()。
q.pop();
INQ [tmp.first] [tmp.second] = 0;
以下のために(INT i = 0; iは<4; I ++)
{
int型NX = tmp.first + DX [I]。
INT NY = tmp.second + DY [I]。
IF(NX> = 1 && NX <= N && NY> = 1 && NY <= M)
{
IF(DIS [NX] [NY]> DIS [tmp.first] [tmp.second] + G [NX] [ NY])
{
DIS [NX] [NY] = DIS [tmp.first] [TMP。
IF(INQ [NX] [NY]!)
{
q.push(P(NX、NY))。
}
}
}
}
}
getans(X、Y)
}
INTメイン(http://www.my516.com)
{
scanf関数( "%D%D%D"、&N、&M&T)。
以下のために(INT i = 1; iは++; iが= N <)
{
ための(int型J = 1; J <= Mであり、j ++)
{
チャーCH。
cinを>> CH;
IF(CH == '1')G [I] [J] = 1。
}
}
(; iが<= N I ++は、I = 1 INT)のための
{
ため(INT J = 1; J <= Mであり、j ++)
{
spfa(i、j)は、
}
}
のprintf( "%6lfする\ n"、ANS)。
0を返します。
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

---------------------

おすすめ

転載: www.cnblogs.com/hyhy904/p/11109102.html