jz集訓 8.12

Day 12

0

T1 迷宮

在這裏插入圖片描述
在這裏插入圖片描述

Solution

注意到 n 最大隻有5,我們想到用線段樹維護區間[l, r]從a[l][i]到a[r][j]移動的最小路徑長,儲存在線段樹裏。
具體push_up的時候枚舉中點k,得到方程tr[k].d[i][j]=min(tr[k].d[i][j],tr[ls(k)].d[i][k]+tr[rs(k)].d[k][j]+1);tr[k].d[i][j]=min(tr[k].d[i][j], tr[ls(k)].d[i][k]+tr[rs(k)].d[k][j]+1);
update的時候直接修改a[i][j]的值,再從修改的點一路push_up就好,這樣就將所有包含修改的點的區間全部更新了一遍。
query時要注意,如果要查詢的區間[L, R]不完全包含在[l, mid]或[mid+1, r]中,還是要將[L,mid]和[mid+1, r]合併一下的。
合併工作和push_up一樣。枚舉中點k轉移。

一開始拿到這道題想到是數據結構,但是沒有什麼思路。
問題還是在我對一些基本數據結構的理解不夠深,換一種不常見使用方式就不熟悉怎麼去做了…

還有,這題分塊可以拿到不錯的分數(80?),考試的時候也沒有去嘗試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章