題面
一道很經典的最短路模型轉換問題。
考慮如何建圖。
我們可以發現,對於每一條公交線路,可以將這條線路上 可以到達的兩個點 連一條權值為 \(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取超級和弦,並加入以美妙度從小排到大的優先佇列中。取出堆頂元素,...