【BZOJ】1706: [usaco2007 Nov]relays 奶牛接力跑
【题意】给定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 奶牛接力跑相关推荐
- bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑(倍增floyd)
1706: [usaco2007 Nov]relays 奶牛接力跑 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 675 Solved: 352 [S ...
- bzoj 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏(floyd)
1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 715 Solved: 47 ...
- bzoj 1642: [Usaco2007 Nov]Milking Time 挤奶时间(DP)
1642: [Usaco2007 Nov]Milking Time 挤奶时间 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 874 Solved: 5 ...
- BZOJ 1707 [Usaco2007 Nov]tanning分配防晒霜
1707: [Usaco2007 Nov]tanning分配防晒霜 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 810 Solved: 387 [S ...
- BZOJ 1640: [Usaco2007 Nov]Best Cow Line 队列变换
Description FJ打算带着他可爱的N (1 ≤ N ≤ 2,000)头奶牛去参加"年度最佳老农"的比赛.在比赛中,每个农夫把他的奶牛排成一列,然后准备经过评委检验. 比赛 ...
- bzoj 1707: [Usaco2007 Nov]tanning分配防晒霜
Description 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在身上抹防晒霜.第i头奶牛适合的最小和最 大的SP ...
- 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>= ...
- BZOJ1706奶牛接力跑
这个东西思路还是不错的. 解法就是把矩阵幂的加法改成取min,乘法改成加法就好,和floyed是一样的.这样的话,矩阵操作一次就相当于松弛了一次最短路. 建矩阵的过程也比较简单,可以离散化,当然下面有 ...
- 【BZOJ】1707: [Usaco2007 Nov]tanning分配防晒霜
[算法]贪心扫描线(+堆) [题意]给定n头牛有区间[a,b],m个防晒霜值为ai,每个可以使用bi次,每次可以使包含它的区间涂到防晒霜,问最多被涂牛数. [题解] 参考:[bzoj1707]: [U ...
最新文章
- 翻译连载 | JavaScript轻量级函数式编程-第4章:组合函数 |《你不知道的JS》姊妹篇...
- JAVA实现查看详情功能_【JavaWeb】111:详情页面的实现
- windows Pycharm 常用快捷键
- Java 使用 endorsed 覆盖jdk提供的类
- python修改类的属性值_python 四种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,直接修改类属性的值...
- 23 Python 面向对象
- Win32 Application和Win32 Console Application的区别
- 将连接数据库的地址写在web.config里面,后台直接调用
- SpringBoot+Vue项目上手
- 2、Scala下载、安装、环境搭建、及基本用法
- java 多语言_JAVA实现多语言
- [TYVJ3097/3121/3369] 战略游戏
- 计算机无法用u盘重装系统,最简单不用U盘电脑重装系统教程
- 第三方自动投票软件制作教程
- 邮件客户端如何配置阿里云企业邮箱
- 黑色幽默(Black humor)
- Python免杀脚本生成.exe(过火绒过联想没过360)
- excel 设置表头表尾
- java导出excel文件(标题为中文乱码)
- nuget程序包还原失败:未能解析此远程名称
热门文章
- 等式成立JAVA_java – 找到两个线性等式成立的整数集
- 左值和左值引用、右值和右值引用
- [转] ROS-I simple_message 源码分析:MessageManager
- struts bean static 静态方法注入
- Facade与Mediator模式的区别
- POI学习笔记 自定义颜色
- Transaction rolled back because it has been marked as rollback-only
- [远航笔记流水账]易大漠多线程初级教程086(1-3)
- vmware的3种网络模式
- java-Integer的自动装箱与拆箱