BZOJ 1295 最長距離 BFS 列舉

2022-07-17 11:00:16 字數 1969 閱讀 4759

題目大意:

windy有一塊矩形土地,被分為 n*m 塊 1*1 的小格仔。 有的格仔含有障礙物。 如果從格仔a可以走到格仔b,那麼兩個格仔的距離就為兩個格仔中心的歐幾里德距離。 如果從格仔a不可以走到格仔b,就沒有距離。 如果格仔x和格仔y有公共邊,並且x和y均不含有障礙物,就可以從x走到y。 如果windy可以移走t塊障礙物,求所有格仔間的最大距離。 保證移走t塊障礙物以後,至少有乙個格仔不含有障礙物。

思路:

列舉兩點,計算出至少需要移開多少塊障礙物,用bfs就可以。

注意,如果每次都進行bfs,那麼將要進行(n*m)^2次bfs,會超時。

所以可以列舉起點進行bfs,每次bfs處理出到達其餘點需要移開的障礙物即可。這樣只需要進行(n*m)次bfs

1 #include2

#define ios ios::sync_with_stdio(false);//

不可再使用scanf printf

3#define max(a, b) ((a) > (b) ? (a) : (b))//

禁用於函式,會超時

4#define min(a, b) ((a) < (b) ? (a) : (b))

5#define mem(a) memset(a, 0, sizeof(a))

6#define dis(x, y, x1, y1) ((x - x1) * (x - x1) + (y - y1) * (y - y1))

7#define mid(l, r) ((l) + ((r) - (l)) / 2)

8#define lson ((o)<<1)

9#define rson ((o)<<1|1)

10#define accepted 0

11#pragma comment(linker, "/stack:102400000,102400000")//

棧外掛程式12

using

namespace

std;

13 inline int

read()

1417

while (ch>='

0'&&ch<='9')

18return x*f;19}

2021 typedef long

long

ll;22

const

int maxn = 100 + 10;23

const

int mod = 1000000007;//

const引用更快,巨集定義也更快

24const

int inf = 1e9 + 7;25

const

double eps = 1e-6;26

double f(int a, int b, int x, int

y)27

31int dir[4][2] = ;

32char map[35][35

];33

bool vis[35][35

];34

35int

n, m, t;

36struct

node

3741 node(int x, int y, int

dis):x(x), y(y), dis(dis){}

42bool

operator

< (const node& a)const

4346

};47

int dis[35][35

];48

int bfs(int a, int

b)4969}

70}71}

72int

main()

7389}90

}91 printf("

%.6f\n

", ans);

92return

accepted;

93 }

bzoj 1295 最長距離 最短路

windy有一塊矩形土地,被分為 n m 塊 1 1 的小格仔。有的格仔含有障礙物。如果從格仔a可以走到格仔b,那麼兩個格仔的距離就為兩個格仔中心的歐幾里德距離。如果從格仔a不可以走到格仔b,就沒有距離。如果格仔x和格仔y有公共邊,並且x和y均不含有障礙物,就可以從x走到y。如果windy可以移走t...

BZOJ 1295 最長距離 最短路

考慮到矩陣尺寸的關係,可以列舉起點和終點,並且判斷是否可行即可。判斷起點和終點是否可以通過挖空至多t個障礙聯通。實際上就是求起點到終點的最短路。所以我們先建好圖,然後求以每個方格為起始點的最短路,複雜度o n m 2 logm 列舉起點和終點更新答案的複雜度是o n 2 m 2 總複雜度就是 nm ...

BZOJ1295 SCOI2009 最長距離

time limit 10 sec memory limit 162 mb submit 1719 solved 935 submit status discuss windy 有一塊矩形土地,被分為 n m 塊 1 1 的小格仔。有的格仔含有障礙物。如果從格仔a可以走到格仔b,那麼兩個格仔的距離就...