POJ 3613/bzoj 1706: [usaco2007 Nov]Cow Relays 奶牛接力跑
来源:互联网 发布:河南豫广网络有线电视 编辑:程序博客网 时间:2024/05/01 04:32
这道题首先看到每个跑道的两个端点都是交点所以其实最多只有100个点!可以离散化一下
当然很容易想到分层图 可是这样还是会超时
所以有了新姿势 倍增Floyd :令f[p][i][j]表示走2^p步从i到达j的最短路 有f[p][i][j]=min{f[p-1][i][k]+f[p-1][k][j]}
将n进行二进制拆分 一个数组用于倍增 一个用于记录就好 当然中间还有一个过渡的(不懂就看代码 其实思想跟矩乘很像的)
当然也可以定义一个新的矩乘 不过要证明是可行的 可以去看一下 俞华程《矩阵乘法在信息学中的应用》
#include<cmath>#include<queue>#include<cstdio>#include<vector>#include<cstring>#include<cstdlib>#include<algorithm>#define me(a,x) memset(a,x,sizeof a)#define cp(a,x) memcpy(a,x,sizeof a)using namespace std;typedef long long LL;const int N=110,inf=1e9;inline int read(){ LL x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();} return x*f;}int f[N][N],g[N][N],h[N][N],p[1010],id;int main(){ int i,j,k,x,y,c,n,m,st,ed; n=read(),m=read(),st=read(),ed=read(); id=0; me(f,63); me(h,63); for(i=1;i<=m;i++) { c=read(),x=read(),y=read(); if(!p[x])p[x]=++id; if(!p[y])p[y]=++id; f[p[x]][p[y]]=f[p[y]][p[x]]=c; } for(i=1;i<=id;i++)h[i][i]=0; while(n) { if(n&1) { me(g,63); for(k=1;k<=id;k++)for(i=1;i<=id;i++)for(j=1;j<=id;j++)g[i][j]=min(g[i][j],f[i][k]+h[k][j]); cp(h,g); } me(g,63); for(k=1;k<=id;k++)for(i=1;i<=id;i++)for(j=1;j<=id;j++)g[i][j]=min(g[i][j],f[i][k]+f[k][j]); cp(f,g); n=n>>1; } printf("%d\n",h[p[st]][p[ed]]); return 0;}
1 0
- POJ 3613/bzoj 1706: [usaco2007 Nov]Cow Relays 奶牛接力跑
- BZOJ 1706 usaco 2007 Nov relays 奶牛接力跑/POJ 3613 Cow Relays 倍增Floyd
- bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑
- BZOJ 1706 usaco2007 Nov relays 奶牛接力跑 倍增Floyd
- [倍增Floyd] BZOJ 1706 [usaco2007 Nov]relays 奶牛接力跑
- 1706: [usaco2007 Nov]relays 奶牛接力跑
- 1706: [usaco2007 Nov]relays 奶牛接力跑 倍增floyd
- 矩阵乘法专题2——bzoj 1706 [usaco2007 Nov] relays 奶牛接力跑 题解
- bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑 (矩阵乘法)
- bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑(倍增floyd)
- BZOJ 1706: [usaco2007 Nov]relays 奶牛接力跑 floyd矩阵乘法
- 【BZOJ1706】[usaco2007 Nov]relays 奶牛接力跑【DP】【矩阵乘法】【限制最短路】
- bzoj1706 [usaco2007 Nov]relays 奶牛接力跑 矩阵乘法(倍增floyd)
- bzoj 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏 floyd
- bzoj 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏(floyd)
- bzoj 1706 奶牛接力
- bzoj1641 [Usaco2007 Nov]Cow Hurdles 奶牛跨栏
- 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏
- 关于java的测试工具junit的使用的介绍
- Python字符编码详解
- main函数的参数列表
- 第一个页面 移动端&PC端
- Linux c/c++ sqlite3 实用demo
- POJ 3613/bzoj 1706: [usaco2007 Nov]Cow Relays 奶牛接力跑
- 来到这里的第一天
- 欢迎使用CSDN-markdown编辑器
- OpenCV Tutorial: 像素強度變換(convertTo)
- Vuforia开发入门三-License Manager(证书管理器)
- HTTP 协议入门
- ARM linux内核启动时几个关键地址
- JS:字符串和数字之间的相互转换
- C# 创建HttpServer