【BZOJ1706】[usaco2007 Nov]relays 奶牛接力跑【DP】【矩阵乘法】【限制最短路】
2016-03-15 15:24
489 查看
http://www.lydsy.com/JudgeOnline/problem.php?id=1706
论文题,详见《矩阵乘法在信息学中的应用》俞华程。
论文说点不会超过100,于是就开了100,果断RE,然后意识到编号最大会到1000,于是只能加个标号了。
inf开小了,wa了几发...
注意因为改了矩阵乘法定义,所以单位矩阵也不是平常的单位矩阵了(我觉得应该是全为inf),强行搞单位矩阵有点麻烦,所以手动先乘一次,指数减一,这样方便。
这是数据:http://contest.usaco.org/TESTDATA/NOV07_5.htm
论文题,详见《矩阵乘法在信息学中的应用》俞华程。
论文说点不会超过100,于是就开了100,果断RE,然后意识到编号最大会到1000,于是只能加个标号了。
inf开小了,wa了几发...
注意因为改了矩阵乘法定义,所以单位矩阵也不是平常的单位矩阵了(我觉得应该是全为inf),强行搞单位矩阵有点麻烦,所以手动先乘一次,指数减一,这样方便。
这是数据:http://contest.usaco.org/TESTDATA/NOV07_5.htm
/* Footprints In The Blood Soaked Snow */ #include <cstdio> #include <algorithm> using namespace std; const int maxn = 105, inf = 0x3f3f3f3f, maxm = 1005; int id[maxm], N; struct _matrix { int num[maxn][maxn]; } trans; inline int iread() { int f = 1, x = 0; char ch = getchar(); for(; ch < '0' || ch > '9'; ch = getchar()) f = ch == '-' ? -1 : 1; for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0'; return f * x; } inline int getid(int x) { if(!id[x]) id[x] = ++N; return id[x]; } inline _matrix mul(_matrix &A, _matrix &B) { _matrix C; for(int i = 1; i <= N; i++) for(int j = 1; j <= N; j++) { C.num[i][j] = inf; for(int k = 1; k <= N; k++) C.num[i][j] = min(C.num[i][j], A.num[i][k] + B.num[k][j]); } return C; } inline _matrix qpow(_matrix &A, int n) { _matrix ans = A; n--; for(_matrix t = A; n; n >>= 1, t = mul(t, t)) if(n & 1) ans = mul(ans, t); return ans; } int main() { for(int i = 0; i < maxn; i++) for(int j = 0; j < maxn; j++) trans.num[i][j] = inf; int n = iread(), m = iread(), st = iread(), ed = iread(); for(int i = 1; i <= m; i++) { int w = iread(), a = iread(), b = iread(); a = getid(a); b = getid(b); trans.num[a][b] = min(trans.num[a][b], w); trans.num[b][a] = min(trans.num[b][a], w); } _matrix ans = qpow(trans, n); printf("%d\n", ans.num[getid(st)][getid(ed)]); return 0; }
相关文章推荐
- C中实现矩阵乘法的一种高效的方法
- java 二维数组矩阵乘法的实现方法
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- LFC1.0.0 版本发布
- Android px、dp、sp之间相互转换
- HP data protector软件学习1--基本角色与基本工作流程
- HP data protector软件学习2--软件组成与界面介绍
- strassen矩阵乘法
- android中像素单位dp、px、pt、sp的比较
- Android对px和dip进行尺寸转换的方法
- Android根据分辨率进行单位转换-(dp,sp转像素px)
- android 尺寸 dp,sp,px,dip,pt详解
- DP问题各种模型的状态转移方程
- POJ-1695-Magazine Delivery-dp
- nyoj-1216-整理图书-dp
- TYVJ1193 括号序列解题报告
- 对DP的一点感想
- TYVJ上一些DP的解题报告
- soj1005. Roll Playing Games