APIO2015 耶加達的摩天樓

2022-05-20 07:48:10 字數 839 閱讀 3499

首先可以看出這是一道求最短路的題目,但暴力建圖最多n2 條邊,所以考慮建圖優化

對於p>sqrt(n) 的青蛙可以直接暴力建,最多n*sqrt(n) 條邊

對於p

1

#define maxn 4000010ul

2 #include 3 #include 4 #include 5 #include 6

7using

namespace

std;89

int n, m, t, inf, s, t, d[maxn], dis[maxn], mp[30010][175

];10

bool

ins[maxn];

1112

struct

edge sg[maxn<<2

];15

16void add(int x, int y, int

z) , d[x] = t ++;

18return;19

}2021void spfa(int

x) 35}36

}37return;38

}3940int

main()

4748

for(int i = 0 ; i < n ; ++i) 53}

54for(int i = 0, b, p ; i < m ; ++i) 63}

64spfa(s);

65if(dis[t]==inf) printf("-1"

);66

else printf("%d"

, dis[t]);

67return0;

68 }

view code

APIO 2015 耶加達的摩天樓

題目鏈結 演算法 考慮將每個 doge 向其所能到達的樓連邊 直接spfa求單源最短路可以獲得57分 那麼 怎樣拿到滿分呢?我們發現這張圖的邊的數量達到了nm的數量級 考慮分塊 將每個點拆成sqrt n 個點 將每個pi sqrt n 的點向 bi pi 連邊 這樣的邊不會超過n sqrt n 條 ...

題解 耶加達的摩天樓 APIO2015

分塊思想,機智的建圖。1.n min sqrt n 100 設乙個玄學限制,跑得會快很多。2.spfa 不要加 lll 也不要加 slf 優化!千萬不要加!不然九十八!我寫了發 spfa 時間略卡。可能 dijkstra 在這道題會更優秀一些吧 1 include 2 include 3 inclu...

AOIP 2015 耶加達的摩天樓

qwq 其實就是個最短路啊,然後發現建的邊最多會有n2 n 2條 所以我們考慮用分塊的思想來優化建圖。pi sqrt n 暴力加入每一條邊,每次最多sqrt n 條邊。pi sqrt n 對於每個點新增sqrt n 個輔助點,這裡可以理解成一棟樓有許多層,每一層一步能走的範圍都不同,然後每一層分別連...