【题意】给定m条边的无向图,起点s,终点t,要求找出s到t恰好经过n条边的最短路径。n<=10^6,m<=100。

【算法】floyd+矩阵快速幂

【题解】

先对点离散化,得到点数N。

对初始边建立初始矩阵,然后考虑每次多跑一条边相当于一次矩阵乘法,即c[i][j]=min(a[i][k],a[k][j]),k=1~N。

定义了矩阵乘法,就可以用矩阵快速幂优化了。

初始矩阵ans[i][i]=0,转移矩阵a[i][i]=inf,这样就是恰好n条边。(如果a[i][i]=0就是<=n条边)

复杂度O(N^3*log n)。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
using namespace std;
const int N=210;//Òª¿ªÁ½±¶¡£
typedef int mat[N][N];
mat a,c,ans;
int n,m,s,t,cnt=0,z[1010];
int read()
{char c;int s=0,t=1;while(!isdigit(c=getchar()))if(c=='-')t=-1;do{s=s*10+c-'0';}while(isdigit(c=getchar()));return s*t;
}
void mul(mat a,mat b){memset(c,0x3f,sizeof(c));for(int i=1;i<=cnt;i++){for(int j=1;j<=cnt;j++){//iºÍjÒ»ÑùÒ²ÊÇ¿ÉÒÔÈÆһȦ»ØÀ´µÄ¡£ for(int k=1;k<=cnt;k++)c[i][j]=min(c[i][j],a[i][k]+b[k][j]);}}for(int i=1;i<=cnt;i++)for(int j=1;j<=cnt;j++)a[i][j]=c[i][j];
}
int main(){n=read();m=read();s=read();t=read();memset(a,0x3f,sizeof(a));for(int i=1;i<=m;i++){int w=read(),u=read(),v=read();//ȨֵÔÚµÚһλ£¡£¡£¡ if(!z[u])z[u]=++cnt;if(!z[v])z[v]=++cnt;u=z[u];v=z[v];a[u][v]=a[v][u]=min(a[u][v],w);}memset(ans,0x3f,sizeof(ans));for(int i=1;i<=cnt;i++)ans[i][i]=0;while(n){if(n&1)mul(ans,a);mul(a,a);n>>=1;}printf("%d",ans[z[s]][z[t]]);return 0;
}    

View Code

转载于:https://www.cnblogs.com/onioncyc/p/7590255.html

【BZOJ】1706: [usaco2007 Nov]relays 奶牛接力跑相关推荐

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

    1706: [usaco2007 Nov]relays 奶牛接力跑 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 675  Solved: 352 [S ...

  2. bzoj 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏(floyd)

    1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 715  Solved: 47 ...

  3. bzoj 1642: [Usaco2007 Nov]Milking Time 挤奶时间(DP)

    1642: [Usaco2007 Nov]Milking Time 挤奶时间 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 874  Solved: 5 ...

  4. BZOJ 1707 [Usaco2007 Nov]tanning分配防晒霜

    1707: [Usaco2007 Nov]tanning分配防晒霜 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 810  Solved: 387 [S ...

  5. BZOJ 1640: [Usaco2007 Nov]Best Cow Line 队列变换

    Description FJ打算带着他可爱的N (1 ≤ N ≤ 2,000)头奶牛去参加"年度最佳老农"的比赛.在比赛中,每个农夫把他的奶牛排成一列,然后准备经过评委检验. 比赛 ...

  6. bzoj 1707: [Usaco2007 Nov]tanning分配防晒霜

    Description 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在身上抹防晒霜.第i头奶牛适合的最小和最 大的SP ...

  7. bzoj 1705: [Usaco2007 Nov]Telephone Wire 架设电话线【dp】

    i的初始化写成2了于是成功查错2h--怕不是个傻子 设f[i][j]为第i根高为j,转移是 \[ f[i][j]=min(f[i-1][k]+abs(k-j)*c+(j-h[i])^2)(j>= ...

  8. BZOJ1706奶牛接力跑

    这个东西思路还是不错的. 解法就是把矩阵幂的加法改成取min,乘法改成加法就好,和floyed是一样的.这样的话,矩阵操作一次就相当于松弛了一次最短路. 建矩阵的过程也比较简单,可以离散化,当然下面有 ...

  9. 【BZOJ】1707: [Usaco2007 Nov]tanning分配防晒霜

    [算法]贪心扫描线(+堆) [题意]给定n头牛有区间[a,b],m个防晒霜值为ai,每个可以使用bi次,每次可以使包含它的区间涂到防晒霜,问最多被涂牛数. [题解] 参考:[bzoj1707]: [U ...

最新文章

  1. 翻译连载 | JavaScript轻量级函数式编程-第4章:组合函数 |《你不知道的JS》姊妹篇...
  2. JAVA实现查看详情功能_【JavaWeb】111:详情页面的实现
  3. windows Pycharm 常用快捷键
  4. Java 使用 endorsed 覆盖jdk提供的类
  5. python修改类的属性值_python 四种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,直接修改类属性的值...
  6. 23 Python 面向对象
  7. Win32 Application和Win32 Console Application的区别
  8. 将连接数据库的地址写在web.config里面,后台直接调用
  9. SpringBoot+Vue项目上手
  10. 2、Scala下载、安装、环境搭建、及基本用法
  11. java 多语言_JAVA实现多语言
  12. [TYVJ3097/3121/3369] 战略游戏
  13. 计算机无法用u盘重装系统,最简单不用U盘电脑重装系统教程
  14. 第三方自动投票软件制作教程
  15. 邮件客户端如何配置阿里云企业邮箱
  16. 黑色幽默(Black humor)
  17. Python免杀脚本生成.exe(过火绒过联想没过360)
  18. excel 设置表头表尾
  19. java导出excel文件(标题为中文乱码)
  20. nuget程序包还原失败:未能解析此远程名称

热门文章

  1. 等式成立JAVA_java – 找到两个线性等式成立的整数集
  2. 左值和左值引用、右值和右值引用
  3. [转] ROS-I simple_message 源码分析:MessageManager
  4. struts bean static 静态方法注入
  5. Facade与Mediator模式的区别
  6. POI学习笔记 自定义颜色
  7. Transaction rolled back because it has been marked as rollback-only
  8. [远航笔记流水账]易大漠多线程初级教程086(1-3)
  9. vmware的3种网络模式
  10. java-Integer的自动装箱与拆箱