題解 洛谷P5767 NOI1997 最優乘車

2022-07-02 11:18:12 字數 804 閱讀 1700

題面

一道很經典的最短路模型轉換問題。

考慮如何建圖。

我們可以發現,對於每一條公交線路,可以將這條線路上 可以到達的兩個點 連一條權值為 \(1\) 的邊。

獲取一條公交線路上的每乙個點可以使用讀取每乙個字元的方式,注意要先讀取第一行的換行符。

然後就是普通的 bfs 求圖的最短路問題了。

最後注意特判輸出no和 \(0\) 的情況。

#include using namespace std;

const int n = 503;

int n, m;

int a[n], tot; //儲存每一條公交線路

bool g[n][n]; //存圖的鄰接矩陣

int dist[n]; //1 號點到每個點的距離

int q[n], hh, tt; //bfs 的佇列

inline void bfs() //bfs 求最短路

}}int main()

for (int j = 1; j < tot; j+=1)

for (int k = j + 1; k <= tot; k+=1)

g[a[j]][a[k]] = true; //建圖

}bfs(); //求最短路

if (dist[n] == 0x3f3f3f3f) puts("no"); //無解

else cout << max(0, dist[n] - 1) << endl; //注意要與 0 取 max

return 0;

}

洛谷 P5767 最優乘車

做法 floyd 神奇思路 本題坑點 讀入很坑,需要用字串讀入,還有記得把第一行行末空格給過濾掉,否則 text 或 text 會把這個回車也給讀了。code 1 include 2 define inf 0x3f3f3f3f 很大的數 3using namespace std 4int n,m,x...

題解 洛谷 P3825 NOI2017 遊戲

從題麵中四元組 i,h i,j,h j 限制選擇車子型號,不難想到這題要用 2 sat 解決。考慮轉化為 2 sat 模型,發現除地圖 x 外,其他地圖都只有兩種車子型號可以參加,那麼就把這兩種型號轉化為兩種狀態。若 s i a 則狀態為 b 和 c 若 s i b 則狀態為 a 和 c 若 s i...

洛谷P2048 NOI2010 超級鋼琴 題解

近期發現這篇題解有點爛,更新一下,刪繁就簡,詳細重點。多加了注釋。就醬紫啦!我們需要先算美妙度的字首和,並初始化rmq。迴圈 i 從 1 到 n 因為以i為起點的和弦終點必定是 i l 1 到 i r 1 之間,所以只要在區間內用rmq取超級和弦,並加入以美妙度從小排到大的優先佇列中。取出堆頂元素,...