題意:給定乙個t(2 <= t <= 100)條邊的無向圖,求s到e恰好經過n(2 <= n <= 1000000)條邊的最短路。
以前一直沒仔細想過floyd演算法,覺得很簡單,今天做這題的時候,看網上的報告都有一句:floyd是每次使用乙個中間點k去更新i,j之間的距離,那麼更新成功表示i,j之間恰有乙個點k時的最短路,如果做n - 1次floyd那麼不就是i,j之間借助n - 1 個點時的最短路了。看了很久不明白為什麼。也對floyd的最外圍的那個k回到這題,floyd演算法是對自身矩陣更新,而這道題卻是更新到另乙個矩陣上,所以不會出現剛更新過的值又來更新。。例如下面**的b.mat[1][3] c.mat[3][5]就分別代表上面的dis[1][3],dis[3][5].我們不需要知道tmp.mat[1][5]已經有的點個數。(即已經更新的次數。)只知道,這次更新會加入乙個3到他們中間。所以更新k-1次就行。
#include #include #include using namespace std;
int k, n, m, s, t, x, y, z;
mapmp;
struct matrix
}st, ans;
void power()
} int main()
power();
printf("%d", ans.a[mp[s]][mp[t]]);
return 0;
}
POJ3613 Cow Relays 矩陣快速冪
這道題,的確是個一眼題。除了離散化不想說什麼。最開始的時候發現這題的輸入很坑,它給的點的編號不是連續的,也就是說雖然最多只有100個點但點的編號可能會很大,那就只能離散化了,最開始用的去重 二分,調了半天不對,發現這很麻煩,於是換了一種,點的編號沒什麼用,除了當乙個標記之外,不需要維護相對大小,所以...
POJ 3613 Floyd 矩陣快速冪
題意 傳送門 poj 3613 cow relays 題解設從 u uu 出發,到 v vv 的長度為 k kk 的最短路徑為 gk u v g k u v gk u v 修改 flo yd floyd floy d 演算法,則有 g k1 k2 u v min 1 w v gk1 u w gk 2...
POJ 3613 Floyd的思想 矩陣乘法
題目描述抽象來看,是指有乙個有向圖,問乙個點經過n條邊到另乙個點的最短距離 邊可重複走 為了搞這題.去研究了下矩陣乘法.我不是計算機專業 又看了下他們的離散數學教材.有乙個例子是說求兩點間經過n條邊到達的方案數.mtrix67的blog的第八題講的也是這個問題.首先看經過n條邊方案數的這個問題.也就...