這個題我覺得很有必要寫一篇部落格。首先,我們需要知道,假如乙個鄰接矩陣只有0/1構成,那麼它自己的n次方就是走n步之後的方案數。但這個題還有2~9咋辦呢。我們觀察發現,這個題只有10個點,而且邊權<=9我們可以想到拆點這個小操作。把每個點拆成9個點,點內連1的邊,點外分別連到相應的權值就行了。
題幹:
windy在有向圖中迷路了。 該有向圖有 n 個節點,windy從節點 0 出發,他必須恰好在 t 時刻到達節點 n-1。 現在給出該有向圖,你能告訴windy總共有多少種不同的路徑嗎? 注意:windy不能在某個節點逗留,且通過某有向邊的時間嚴格為給定的時間。
**:
#include#include#include
#include
#include
#include
#include
using
namespace
std;
#define duke(i,a,n) for(register int i = a;i <= n;i++)
#define lv(i,a,n) for(register int i = a;i >= n;i--)
#define clean(a) memset(a,0,sizeof(a))
const
int inf = 1
<< 30
;const
int mod = 2009
;typedef
long
long
ll;typedef
double
db;template
void read(t &x)
template
void
write(t x)
intm,t;
struct
mat
void
i()
}inline mat
operator * (const mat &oth)
res.a[i][j] =sum;}}
return
res;
}}a,b;
mat qpow(mat a,
intk)
a = a *a;
k >>= 1;//
cout<}
returnc;}
char s[105
];int
main()
duke(i,
1,m)
}//cout<<"??"printf(
"%d\n
",b.a[1][m * 9 - 8
]);
return0;
}/*2 211
00*/
題解 bzoj1297 SCOI2009 迷路
windy在有向圖中迷路了。該有向圖有 n 個節點,windy從節點 0 出發,他必須恰好在 t 時刻到達節點 n 1。現在給出該有向圖,你能告訴windy總共有多少種不同的路徑嗎?注意 windy不能在某個節點逗留,且通過某有向邊的時間嚴格為給定的時間。第一行包含兩個整數,n t。接下來有 n 行...
BZOJ1297 SCOI2009 迷路 題解
windy在有向圖中迷路了。該有向圖有 n 個節點,windy從節點 0 出發,他必須恰好在t 時刻到達節點 n 1。現在給出該有向圖,你能告訴windy總共有多少種不同的路徑嗎?注意 windy不能在某個節點逗留,且通過某有向邊的時間嚴格為給定的時間。思考當邊權為1時,a i j 1可以表示為i到...
1297 SCOI2009 迷路 矩陣乘法
windy在有向圖中迷路了。該有向圖有 n 個節點,windy從節點 0 出發,他必須恰好在 t 時刻到達節點 n 1。現在給出該有向圖,你能告訴windy總共有多少種不同的路徑嗎?注意 windy不能在某個節點逗留,且通過某有向邊的時間嚴格為給定的時間。第一行包含兩個整數,n t。接下來有 n 行...