題意
傳送門 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
]=
min1≤
w≤v(
gk1[
u][w
]+gk
2[w]
[v])
g_[u][v]=\min\limits_(g_[u][w]+g_[w][v])
gk1+k
2[
u][v
]=1≤
w≤vmin(
gk1
[u]
[w]+
gk2
[w]
[v])
用矩陣快速冪求解。初始化矩陣時,g
1g_1
g1 為原圖的鄰接矩陣,需要注意的是,按照定義,無自環的情況下 g1[
u][u
]=in
fg_1[u][u]=inf
g1[u]
[u]=
inf;同理 g0[
u][u
]=
0g_0[u][u]=0
g0[u]
[u]=
0。複雜度 o(t
3logn
)o(t^3\log n)
o(t3
logn)。
#include
#include
#include
#include
using
namespace std;
#define maxt 105
#define maxv 1005
#define inf 0x3f3f3f3f
typedef vector<
int> vec;
typedef vector mat;
int n, t, s, e, a[maxt]
, b[maxt]
, l[maxt]
, nv, cp[maxv]
;mat mul
(mat &c, mat &d)
mat pow
(mat &m,
int n)
return r;
}int
main()
mat m
(nv,
vec(nv, inf));
for(
int i =
0; i < t;
++i)
m =pow(m, n)
;printf
("%d\n"
, m[cp[s]
][cp[e]])
;return0;
}
POJ 3613 Floyd的思想 矩陣乘法
題目描述抽象來看,是指有乙個有向圖,問乙個點經過n條邊到另乙個點的最短距離 邊可重複走 為了搞這題.去研究了下矩陣乘法.我不是計算機專業 又看了下他們的離散數學教材.有乙個例子是說求兩點間經過n條邊到達的方案數.mtrix67的blog的第八題講的也是這個問題.首先看經過n條邊方案數的這個問題.也就...
POJ3613 Cow Relays 矩陣快速冪
這道題,的確是個一眼題。除了離散化不想說什麼。最開始的時候發現這題的輸入很坑,它給的點的編號不是連續的,也就是說雖然最多只有100個點但點的編號可能會很大,那就只能離散化了,最開始用的去重 二分,調了半天不對,發現這很麻煩,於是換了一種,點的編號沒什麼用,除了當乙個標記之外,不需要維護相對大小,所以...
構造矩陣 矩陣快速冪 POJ3735
這題題意如下,有n 只貓咪,三種關於花生的命令 得花生,吃花生,交換花生 給出一套命令,重複 n 次,問最後每只貓咪得到多少花生。m那麼大,毫無疑問,矩陣快速冪。先構造乙個單位矩陣,因為只需在單位矩陣上進行操作,然後用操作完之後得到的矩陣乘以初始的狀態就得到最終的狀態。看下圖 第 i 只貓咪得花生就...