[scoi2009]最長距離
time limit: 10 sec memory limit: 162 mbwindy有一塊矩形土地,被分為 nm 塊 11 的小格仔。 有的格仔含有障礙物。 如果從格仔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
【輸入樣例二】
4 3 0
【輸入樣例三】
3 3 1
【輸出樣例一】
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 。
考慮兩個點怎麼算聯通?
就是說如果路徑長度是上面黑點的個數的話。
就看最短路是不是小於等於t就好了。。
資料範圍可以讓你瘋狂 spfa 為所欲為2333
```c++
using namespace std;
struct lpl;
int n, m, t;
double ans;
int x = ;
int y = ;
char mp[35][35];
int dis[35][35];
bool vis[35][35];
queueq;
inline bool check(int a, int b)
inline void spfa(int a, int b));
lpl now;
while(!q.empty()));}}
}}inline double sq(double t)
inline double dis(int a1, int b1, int a2, int b2)
inline void calc(int a, int b)
}int main()
printf("%.6lf", ans);
return 0;
}
BZOJ1295 SCOI2009 最長距離
time limit 10 sec memory limit 162 mb submit 1719 solved 935 submit status discuss windy 有一塊矩形土地,被分為 n m 塊 1 1 的小格仔。有的格仔含有障礙物。如果從格仔a可以走到格仔b,那麼兩個格仔的距離就...
BZOJ1295 SCOI2009 最長距離
給出乙個n m的矩陣,有障礙物,a,b 和 c,d 存在距離當且僅當兩個點能互相到達,且距離為歐幾里德距離 可以移走t個障礙物,求出距離最大的兩個點的距離 n,m這麼這麼小 直接o n2m2 跑最短路,水題 include include include include include using ...
bzoj1295 SCOI2009 最長距離
windy有一塊矩形土地,被分為 n m 塊 1 1 的小格仔。有的格仔含有障礙物。如果從格仔a可以走到格仔b,那麼兩個格仔的距離就為兩個格仔中心的歐幾里德距離。如果從格仔a不可以走到格仔b,就沒有距離。如果格仔x和格仔y有公共邊,並且x和y均不含有障礙物,就可以從x走到y。如果windy可以移走t...