shoi2012 d2t1
\(2046\) 年 \(oi\) 城的城市軌道交通建設終於全部竣工,由於前期規劃周密,建成後的軌道交通網路由\(2n\)條地鐵線路構成,組成了乙個\(n\)縱\(n\)橫的交通網。如下圖所示,這\(2n\)條線路每條線路都包含\(n\)個車站,而每個車站都在一組縱橫線路的交匯處。
出於建設成本的考慮,並非每個車站都能夠進行站內換乘,能夠進行站內換乘的地鐵站共有\(m\)個,在下圖中,標上方塊標記的車站為換乘車站。已知地鐵執行 \(1\) 站需要 \(2\) 分鐘,而站內換乘需要步行 \(1\) 分鐘。\(serenade\) 想要知道,在不中途出站的前提下,他從學校回家最快需要多少時間(等車時間忽略不計)。
輸入格式:
第一行有兩個整數\(n,m\)。
接下去\(m\)行每行兩個整數\(x,y\),表示第\(x\)條橫向線路與第\(y\)條縱向線路的交
匯站是站內換乘站。
接下去一行是四個整數\(x_1,y_1,x_2,y_2\)。表示 \(serenade\) 從學校回家時,在第 \(x_1\)條橫向線路與第\(y_1\)條縱向線路的交匯站上車,在第\(x_2\)條橫向線路與第\(y_2\)條縱向線路的交匯站下車。
輸出格式:
輸出檔案只有一行,即 \(serenade\) 在合理選擇線路的情況下,回家所需要的時間。如果 \(serenade\) 無法在不出站換乘的情況下回家,請輸出\(-1\)。
輸入樣例#1:
2 1
1 21 1 2 2
輸出樣例#1:
5
輸入樣例#2:
6 9
2 12 5
3 24 4
5 25 6
6 16 3
6 41 1 4 6
輸出樣例#2:
27
輸入樣例#3:
6 10
2 12 5
3 24 4
5 25 6
6 16 3
6 46 6
1 1 4 6
輸出樣例#3:
26
對於 \(30\%\)的資料,\(n\le 50,m\le 1000\);
對於 \(60\%\)的資料,\(n\le 500,m\le 2000\);
對於 \(100\%\)的資料,\(n\le 20000,m\le 100000\);
思路:裸的分層最短路,對於這個題目來說,層與層之間的權值為\(1\)。
而且看資料範圍,\(n\)這麼大的乙個範圍,肯定不能\(n^2\)存圖了,那麼我們就列舉每個中轉點(換乘點),橫縱分別求兩個中轉點之間的距離,然後存下來,每層起點和起點的對映及終點和終點的對映都要是0,然後直接上堆優化dijkstra,這個題就做完了。
分層最短路需要注意的問題:
1、陣列的大小,這個很重要。
2、確定每層之間的權值是多少。
3、考慮如何建邊。
注意了這三個問題之後,分層最短路就跟裸的最短路沒什麼區別了……
於是我們開開心心的來看**(**就不解釋了,有了思路就能看懂):
#include#include#include#include#include#define maxn 200001
using namespace std;
int num,n,m,head[800001],dis[800001];
inline int qread()
struct edge e[800001];
struct node
};struct edge zrj[maxn];
bool cmp1(edge a,edge b));
while(!q.empty()) );
} } }
}int main()
希望這篇題解可以對大家了解分層最短路有些幫助。 P3831 SHOI2012 回家的路 題解
題目傳送門 解法 1 每兩個點都連邊,跑裸的最短路。顯然,n 和 m 非常大,暴力連邊會 tle 和 mle。解法 2 正解 首先,對答案產生貢獻的只有換乘站,所以我們只用連兩種邊 乙個換乘站看作 2 個節點,連邊,邊權為 1 站內換乘 將 x 相等的換乘站相連,y 相等的換乘站相連。其中,起點和終...
題解 P3831 SHOI2012 回家的路
什麼叫分層圖最短路,我不會 kk 感覺自己做法和其他題解不大一樣所以過來發篇題解了。未刻意卡常拿下最優解 就是說給你乙個 n times n 的網格圖和 m 個可換乘點,然後你只能在同一行或同一列 如果在行上移動,就不能在列上移動 反之同理 上移動,除非這個點是可以換乘的。每次走一格花費 2 費,換...
P5468 P6302 NOI2019 回家路線
原題p5468,洛谷加強版p6302,loj3156 聽說原題是用腳造的資料,所以可能無法把 的鍋都測出來,所以還是去加強版吧 做了好長時間,主要是原版得分玄學,有的時候把 乙個地方改錯甚至得了更多的分 當時同時還存在其它的錯 jk,然後加強版又被卡常 kk 斜率優化dp vector 維護凸包 堆...