考慮到矩陣尺寸的關係,可以列舉起點和終點,並且判斷是否可行即可。
判斷起點和終點是否可以通過挖空至多t個障礙聯通。實際上就是求起點到終點的最短路。
所以我們先建好圖,然後求以每個方格為起始點的最短路,複雜度o(n*m^2*logm).
列舉起點和終點更新答案的複雜度是o(n^2*m^2).
總複雜度就是(nm(nm+mlogm)).
# include # includeview code# 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;
}
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,那麼兩個格仔的距離就...