题解:

倍增+floyd

首先这题比较容易想到是把每个点拆点做dij

但是这样复杂度是knlogn的

这道题的k较大,所以不行

我们考虑到每走一步,其实就是在进行一次floyd

而这个可以看成矩阵乘法

所以可以倍增优化

这样是logk*n^3的

 代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define lowbit(x) (x&(-x))
  4. #define IL inline
  5. #define rint register int
  6. #define me(x) memset(x,0,sizeof(x))
  7. #define fi first
  8. #define se second
  9. #define mid ((h+t)/2)
  10. #define rep(i,h,t) for (rint i=h;i<=t;i++)
  11. #define dep(i,t,h) for (rint i=t;i>=h;i--)
  12. #define setit set<int>::iterator
  13. const int INF=1e9;
  14. char ss[<<],*A=ss,*B=ss;
  15. IL char gc()
  16. {
  17. return A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++;
  18. }
  19. template<class T>void read(T &x)
  20. {
  21. rint f=,c; while (c=gc(),c<||c>) if (c=='-') f=-; x=c^;
  22. while (c=gc(),<c&&c<) x=(x<<)+(x<<)+(c^); x*=f;
  23. }
  24. int n,m,s,t,cnt;
  25. struct re{
  26. int d[][];
  27. }ys;
  28. re js(re x,re y)
  29. {
  30. re ans;
  31. rep(i,,)
  32. rep(j,,)
  33. ans.d[i][j]=INF;
  34. rep(k,,cnt)
  35. rep(i,,cnt)
  36. rep(j,,cnt)
  37. ans.d[i][j]=min(ans.d[i][j],x.d[i][k]+y.d[k][j]);
  38. return(ans);
  39. }
  40. re qpow(int x)
  41. {
  42. if (x==) return(ys);
  43. re y=qpow(x/);
  44. y=js(y,y);
  45. if (x%) y=js(y,ys);
  46. return(y);
  47. }
  48. int main()
  49. {
  50. freopen("1.in","r",stdin);
  51. freopen("1.out","w",stdout);
  52. read(n); read(m); read(s); read(t);
  53. rep(i,,)
  54. rep(j,,)
  55. ys.d[i][j]=INF;
  56. map<int,int>M;
  57. rep(i,,m)
  58. {
  59. int x,y,z;
  60. read(x); read(y); read(z);
  61. int x1,x2;
  62. if (!M[y]) x1=M[y]=++cnt; else x1=M[y];
  63. if (!M[z]) x2=M[z]=++cnt; else x2=M[z];
  64. ys.d[x1][x2]=min(ys.d[x1][x2],x);
  65. ys.d[x2][x1]=min(ys.d[x2][x1],x);
  66. }
  67. re ans=qpow(n);
  68. printf("%d",ans.d[M[s]][M[t]]);
  69. return ;
  70. }

BZOJ 1706的更多相关文章

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

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

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

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

  3. bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑【矩阵乘法+Floyd】

    唔不知道怎么说--大概核心是把矩阵快速幂的乘法部分变成了Floyd一样的东西,非常之神 首先把点离散一下,最多有200个,然后建立邻接矩阵,a[u][v]为(u,v)之间的距离,没路就是inf 然后注 ...

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

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

  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. USACO 刷题记录bzoj

    bzoj 1606: [Usaco2008 Dec]Hay For Sale 购买干草——背包 #include<cstdio> #include<cstring> #incl ...

  7. Luogu 2886 [USACO07NOV]牛继电器Cow Relays

    BZOJ 1706权限题. 倍增$floyd$. 首先这道题有用的点最多只有$200$个,先离散化. 设$f_{p, i, j}$表示经过$2^p$条边从$i$到$j$的最短路,那么有转移$f_{p, ...

  8. 【BZOJ】1706: [usaco2007 Nov]relays 奶牛接力跑

    [题意]给定m条边的无向图,起点s,终点t,要求找出s到t恰好经过n条边的最短路径.n<=10^6,m<=100. [算法]floyd+矩阵快速幂 [题解] 先对点离散化,得到点数N. 对 ...

  9. 【BZOJ】1297: [SCOI2009]迷路

    [题意]给定n个点的有向带边权图,求0到n-1长度恰好为T的路径数.n<=10,T<=10^9,边权1<=wi<=9. [算法]矩阵快速幂 [题解]这道题的边权全部为1时,有简 ...

随机推荐

  1. 设计模式C++学习笔记之四(Multition多例模式)

      多例模式,这个在GOF的模式设计里没有提到,但在实际工作中确实会用到.更详细的内容及说明可以参考原作者博客:cbf4life.cnblogs.com. 4.1.解释 main(),客户 略 说明: ...

  2. 004_LVS及haproxy

    一.lvs工作在哪层(新浪面试题) http://blog.chinaunix.net/uid-346158-id-2131163.html 二.四层.七层负载均衡的区别 所谓四层就是基于IP+端口的 ...

  3. C# AutoResetEvent 使用整理

    AutoResetEvent 允许线程通过发信号互相通信.通常,此通信涉及线程需要独占访问的资源. 线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号.如果 AutoRese ...

  4. $Django content_type组件 缓存组件

    1  content_type组件(只能方便插入添加) 需求:课程,学位课(不同的课程字段不一样),价格策略 #免费课 class Free_classes (models.Model): id = ...

  5. mysql5.7 参数记录 (持续更新)

    sync_binlog 控制数据库的binlog刷到磁盘 默认sync_binlog=1,表示每次事务提交,MySQL都会把binlog刷下去,是最安全但是性能损耗最大的设置. sync_binlog ...

  6. ID过滤靓号写法(PHP和Nodejs版本)

    1 前言 例如某APP的用户ID,需要按照一定规则把靓号先存取来,然后慢慢按要求释放靓号 2 代码 PHP版本如下: function genUserId(){ $id = ""; ...

  7. 点9图 Android设计中如何切图.9.png

    转载自:http://blog.csdn.net/buaaroid/article/details/51499516 本文主要介绍如何制作 切图.9.png(点9图),另一篇姊妹篇文章Android屏 ...

  8. ORA-00257: archiver error. Connect internal only, until freed.| Oracle数据库归档日志满导致应用系统反应缓慢的问题处理

    一:查看原因 查看了下V$FLASH_RECOVERY_AREA_USAGE,看看归档目录使用的情况.果然是归档满了. Disconnected from Oracle Database 11g En ...

  9. Confluence 6 注册单一小工具

    如果你不能订阅一个应用的小工具,你需要将小工具一个一个的添加进来.针对网站不支持小工具订阅和你的应用和你的 Confluence 不能建立信任连接的情况,你就只能这样添加了. 首先你需要获得小工具的 ...

  10. vue阿里上传图片报400错误

    首先我用vue上传阿里图片用的是分片上传,分片上传由于一片是以100kb为起始的,所以当图片大小小于100kb的时候不分片,可以正常上传,当大于100kb的时候,会报400错误如下 One or mo ...