BZOJ 1295 最長距離 最短路

2022-05-27 00:57:08 字數 1774 閱讀 5422

考慮到矩陣尺寸的關係,可以列舉起點和終點,並且判斷是否可行即可。

判斷起點和終點是否可以通過挖空至多t個障礙聯通。實際上就是求起點到終點的最短路。

所以我們先建好圖,然後求以每個方格為起始點的最短路,複雜度o(n*m^2*logm).

列舉起點和終點更新答案的複雜度是o(n^2*m^2).

總複雜度就是(nm(nm+mlogm)).

# include # include 

# include

# include

# include

# include

# include

# include

# include

# include

# include

using

namespace

std;

# define lowbit(x) ((x)&(-x))

# define pi

3.1415926535

# define eps 1e-9

# define mod

100000007

# define inf

1000000000

# define mem(a,b) memset(a,b,

sizeof

(a))

# define for(i,a,n)

for(int i=a; i<=n; ++i)

# define fo(i,a,n)

for(int i=a; ii)

# define bug puts("h

");# define lch p

<<1

,l,mid

# define rch p

<<1|1,mid+1

,r# define mp make_pair

# define pb push_back

typedef pair

pii;

typedef vector

vi;# pragma comment(linker,

"/stack:1024000000,1024000000")

typedef

long

long

ll;int

scan()

void out(int

a)

if(a>=10) out(a/10

); putchar(a%10+'0'

);}const

int n=905;//

code begin...

struct

qnode

bool

operator

};struct edgeedge[n*8

];int head[n], cnt=1

, dis[n], g[n][n];

char s[35][35

];bool

vis[n];

void add_edge(int u, int v, int

w)void dijkstra(int n, int

start)

}}int

main ()

double ans=0

; fo(i,

0,n) fo(j,0

,m)

}printf(

"%.6f\n

",ans);

return0;

}

view code

bzoj 1295 最長距離 最短路

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

BZOJ 1295 最長距離 BFS 列舉

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

BZOJ1295 SCOI2009 最長距離

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