SCOI2009 BZOJ1295 最長距離

2022-08-03 14:21:20 字數 1741 閱讀 4475

time limit: 10 sec  memory limit: 162 mb

submit: 1018  solved: 538

[submit][status][discuss]

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

輸入檔案maxlength.in第一行包含三個整數,n m t。 接下來有n行,每行乙個長度為m的字串,'0'表示空格子,'1'表示該格仔含有障礙物。

輸出檔案maxlength.out包含乙個浮點數,保留6位小數。

【輸入樣例一】

3 3 0

001001

110【輸入樣例二】

4 3 0

001001

011000

【輸入樣例三】

3 3 1

001001

001【輸出樣例一】

1.414214

【輸出樣例二】

3.605551

【輸出樣例三】

2.828427

20%的資料,滿足 1 <= n,m <= 30 ; 0 <= t <= 0 。

40%的資料,滿足 1 <= n,m <= 30 ; 0 <= t <= 2 。

100%的資料,滿足 1 <= n,m <= 30 ; 0 <= t <= 30

暴力spfa……

從每個點開始做一遍spfa,求出任意兩點之間相互到達需要經過的最少障礙數。然後判斷是否小於或等於t,否則不可行。然後求出可行方案的最大距離。

#include#include

#include

#include

#include

#include

#include

#define mod 49999

#define inf 100000007

using

namespace

std;

double

ans;

char s[31][31

];bool v[909

];int dx[5]=;

int dy[5]=;

int n,m,t,tot,edge,num[31][31],map[909][909],dis[909],q[50000],next[50000],head[909],list[50000],key[50000

];void insert(int x,int y,int

z)void

build()

}void spfa(int sx,int

sy) }

v[x]=0

; }

for (int i=1;i<=tot;i++) map[num[sx][sy]][i]=dis[i];

}

double calc(int x,int

y)int

main()

}printf(

"%.6lf

",ans);

return0;

}

tyvj上直接全部輸出-0.00000 …… 0mswa……八中a了

題解 bzoj1297 SCOI2009 迷路

windy在有向圖中迷路了。該有向圖有 n 個節點,windy從節點 0 出發,他必須恰好在 t 時刻到達節點 n 1。現在給出該有向圖,你能告訴windy總共有多少種不同的路徑嗎?注意 windy不能在某個節點逗留,且通過某有向邊的時間嚴格為給定的時間。第一行包含兩個整數,n t。接下來有 n 行...

BZOJ1297 SCOI2009 迷路 題解

windy在有向圖中迷路了。該有向圖有 n 個節點,windy從節點 0 出發,他必須恰好在t 時刻到達節點 n 1。現在給出該有向圖,你能告訴windy總共有多少種不同的路徑嗎?注意 windy不能在某個節點逗留,且通過某有向邊的時間嚴格為給定的時間。思考當邊權為1時,a i j 1可以表示為i到...

BZOJ1295 SCOI2009 最長距離

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