qwq…
其實就是個最短路啊,然後發現建的邊最多會有n2
n
2條…
所以我們考慮用分塊的思想來優化建圖。
pi>sqrt(n),暴力加入每一條邊,每次最多sqrt(n)條邊。
pi≤sqrt(n),對於每個點新增sqrt(n)個輔助點,這裡可以理解成一棟樓有許多層,每一層一步能走的範圍都不同,然後每一層分別連邊,每一層到樓底連邊。對於乙隻doge,從樓底到pi對應的樓層連邊。邊數是o(n*sqrt(n))的。
跑一下spfa就可以了…
luogu 3645
#include
#include
#include
#include
#include
#include
const
int maxm=30005*800;
int cnt;
int n,m,block;
int head[maxm],net[maxm],cost[maxm],to[maxm];
int dis[maxm],vis[maxm];
std::queue
dl;
inline
void addedge(int u,int v,int c)
inline
int spfa(int s,int t)
}return dis[t]==dis[0]?-1:dis[t];
}int main()
int s,t;
for(int i=1;i<=m;i++)
else addedge(b,b+p*n,0);
}printf("%d\n",spfa(s,t));
return
0;}
bzoj4070 APIO2015 耶加達的摩天樓
time limit 10 sec memory limit 256 mb submit 189 solved 70 submit status discuss 印尼首都耶加達市有 n 座摩天樓,它們排列成一條直線,我們從左到右依次將它們編號為 0 到 n 1。除了這 n 座摩天樓外,耶加達市沒有其...
APIO 2015 耶加達的摩天樓
題目鏈結 演算法 考慮將每個 doge 向其所能到達的樓連邊 直接spfa求單源最短路可以獲得57分 那麼 怎樣拿到滿分呢?我們發現這張圖的邊的數量達到了nm的數量級 考慮分塊 將每個點拆成sqrt n 個點 將每個pi sqrt n 的點向 bi pi 連邊 這樣的邊不會超過n sqrt n 條 ...
APIO2015 耶加達的摩天樓
首先可以看出這是一道求最短路的題目,但暴力建圖最多n2 條邊,所以考慮建圖優化 對於p sqrt n 的青蛙可以直接暴力建,最多n sqrt n 條邊 對於p1 define maxn 4000010ul 2 include 3 include 4 include 5 include 6 7usin...