題解 耶加達的摩天樓 APIO2015

2022-08-12 16:18:17 字數 951 閱讀 8278

分塊思想,機智的建圖。

1.n = min(sqrt(n), 100) ……設乙個玄學限制,跑得會快很多。

2.spfa 不要加 lll 也不要加 slf 優化!千萬不要加!不然九十八!

我寫了發 spfa ,時間略卡。可能 dijkstra 在這道題會更優秀一些吧……

1 #include 2 #include 3 #include 4

5using

namespace

std;67

const

int _v = 30005*105;8

const

int _e = 30005*500;9

const

int inf =1e9;

1011 dequeq;

12int

v[_e], w[_e], nxt[_e], fst[_v], dis[_v];

13int

tot, n, n, m;

14bool

mk[_v];

1516

void ins(int t1, int t2, int

t3)17

2324

void spfa(int

beg)

2541}42

}43}44

}45return;46

}4748int

main()

4960}61

for (i = 1; i <= m; ++i) else74}

75 spfa(beg*(n+1)+n+1

);76 printf("

%d\n

", dis[end*(n+1)+n+1] >= inf ? -1 : dis[end*(n+1)+n+1

]);77

return0;

78 }

view code

AOIP 2015 耶加達的摩天樓

qwq 其實就是個最短路啊,然後發現建的邊最多會有n2 n 2條 所以我們考慮用分塊的思想來優化建圖。pi sqrt n 暴力加入每一條邊,每次最多sqrt n 條邊。pi sqrt n 對於每個點新增sqrt 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...