传送门

倍增+floyd板子题。

先列出状态fi,j,kf_{i,j,k}fi,j,k​表示经过iii条边从jjj到kkk的最短路。

然后发现可以用fi−1,j,kf_{i-1,j,k}fi−1,j,k​和f1,j,kf_{1,j,k}f1,j,k​来转移出fi,j,kf_{i,j,k}fi,j,k​。

由于floydfloydfloyd可以看做是矩阵乘法,因此可以用倍增/快速幂优化矩阵转移。

代码:

#include<bits/stdc++.h>
#include<tr1/unordered_map>
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
const int N=205;
int T,n,m,s,t;
struct Matrix{
	int a[N][N];
	Matrix(){memset(a,0x3f,sizeof(a));}
	friend inline Matrix operator*(const Matrix&a,const Matrix&b){
		Matrix ret;
		for(int i=1;i<=n;++i)for(int k=1;k<=n;++k)for(int j=1;j<=n;++j)ret.a[i][j]=min(ret.a[i][j],a.a[i][k]+b.a[k][j]);
		return ret;
	}
}ans,dis;
int S[1005];
int main(){
	T=read(),m=read(),s=read(),t=read();
	for(int i=1,u,v,w;i<=m;++i){
		w=read(),u=read(),v=read();
		if(!S[u])S[u]=++n;
		if(!S[v])S[v]=++n;
		u=S[u],v=S[v],dis.a[u][v]=dis.a[v][u]=min(dis.a[u][v],w);
	}
	for(int i=1;i<=n;++i)ans.a[i][i]=0;
	for(int i=0;i<=20;++i,dis=dis*dis)if((T>>i)&1)ans=ans*dis;
	printf("%d",ans.a[S[s]][S[t]]);
	return 0;
}

2018.11.09 bzoj1706: relays 奶牛接力跑(倍增+floyd)的更多相关文章

  1. bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑——倍增floyd

    Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T < ...

  2. BZOJ 1706: [usaco2007 Nov]relays 奶牛接力跑 倍增Floyd

    题不难,但是一开始把读入看错了,调了半天qaq~ Code: #include <bits/stdc++.h> #define N 300 #define setIO(s) freopen ...

  3. bzoj1706 relays 奶牛接力跑 线性代数

    题目描述 FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T <= 100) ...

  4. 【BZOJ1706】[usaco2007 Nov]relays 奶牛接力跑 矩阵乘法

    [BZOJ1706][usaco2007 Nov]relays 奶牛接力跑 Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项 ...

  5. 【BZOJ】【1046】/【POJ】【3613】【USACO 2007 Nov】Cow Relays 奶牛接力跑

    倍增+Floyd 题解:http://www.cnblogs.com/lmnx/archive/2012/05/03/2481217.html 神题啊= =Floyd真是博大精深…… 题目大意为求S到 ...

  6. BZOJ_[usaco2007 Nov]relays 奶牛接力跑_离散化+倍增弗洛伊德

    BZOJ_[usaco2007 Nov]relays 奶牛接力跑_离散化+倍增弗洛伊德 Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们 ...

  7. 「题解」:[线性代数]:relays 奶牛接力跑

    问题: relays 奶牛接力跑 时间限制: 1 Sec  内存限制: 256 MB 题面 题目描述 FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼 ...

  8. 【bzoj1706】[usaco2007 Nov]relays 奶牛接力跑 离散化+倍增Floyd

    题目描述 FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T <= 100) ...

  9. BZOJ 1706: [usaco2007 Nov]relays 奶牛接力跑

    Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T < ...

随机推荐

  1. Angular之替换根组件

    一 在index.html中,替换根组件选择器 <!doctype html> <html lang="en"> <head> <meta ...

  2. Django具体操作(四)

    自定义模板语法的标签 首先在django的项目中创建app并且在settings中添加了APP的名称. 在app添加templatetags模块(名字是固定的,也就是说,必须要这样) 如图如何自定义呢 ...

  3. 通过docker-compose构建ghost博客(二)

    上一篇通过yml文件构建 ghost博客,这次通过构建nginx服务,并添加反向代理来运行搭建的ghost博客. 目录结构 ghost.conf 就是 定义的nginx 加载的配置文件 server ...

  4. Fresco加载显示gif图片

    第一步:首先要导包 Android Studio 或者 Gradle dependencies { compile 'com.facebook.fresco:fresco:0.6.0+' } 第二步: ...

  5. css兼容性写法大全

    淘宝初始化代码 body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset ...

  6. Android 工程目录

    app java:我们写Java代码的地方,业务功能都在这里实现 res:存放我们各种资源文件的地方,有图片,字符串,动画,音频等,还有各种形式的XML文件 Gradle Scripts 1.res资 ...

  7. Angular5学习札记

    1.使用cnpm安装jQuery和bootstrap后,页面没有加载的问题 -使用cnpm安装的路径和使用npm安装路径不一样,解决如下: 把css路径改成"../node_modules/ ...

  8. hdu 1495 (搜索) 非常可乐

    http://acm.hdu.edu.cn/showproblem.php?pid=1495 搜索模拟出每此倒得情况就好,详情见代码\ (好困啊!!!!1) #include<cstdio> ...

  9. 反射中,Class.forName 和 classloader 的区别

    https://blog.csdn.net/qq_27093465/article/details/52262340 java中class.forName()和classLoader都可用来对类进行加 ...

  10. 1.3 Java中的标识符和关键字

    1.标识符 含义:标识符用于给程序中的类.变量.方法命名的符号. 组成:数字(0-9).字母(a-z)(A-Z).下划线(_).美元符号$. 命名规则:1.数字不能够作为命名符号的开头 2.不能够使用 ...