AOIP 2015 耶加達的摩天樓

2021-08-19 21:53:24 字數 913 閱讀 2544

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...