分塊思想,機智的建圖。
1.n = min(sqrt(n), 100) ……設乙個玄學限制,跑得會快很多。
2.spfa 不要加 lll 也不要加 slf 優化!千萬不要加!不然九十八!
我寫了發 spfa ,時間略卡。可能 dijkstra 在這道題會更優秀一些吧……
1 #include 2 #include 3 #include 4view code5using
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 }
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...