Description

为增强体质,约翰决定举办一场奶牛接力跑比赛。比赛现场有一些接力位置,这些位置间有T条路连接,第i条路的长度为Li。 有N头奶牛需要参加比赛,领头的奶牛从位置S出发,她会按照你的指示沿着一条路跑到下个位置,把接力棒交给等在那里的下一头奶牛,就休息去了。每头奶牛重复这个过程这条接力路线的终点必须在位置E上。

奶牛数量较多,允许一些奶牛等候在同一位置,一条路也可以供多头奶牛奔跑。 奶牛们对接力跑兴趣不大,拜托你敷衍地设计一条总长度最短的路线。所以请设计一条由N段路组成的,起点在S,终点在E上的最短路线吧。

Input Format

第一行:四个用空格分开的整数:表示N,T,S和E,2 ≤ N ≤ 106,2 ≤ T ≤ 100,1 ≤ S, E ≤ 1000

第二行到T + 1行: 第i + 1行首先有一个正整数Li,表示第i条路的长度, 1 ≤ Li ≤ 1000,其次是Ui和Vi,表示第i条路连接的两个位置,1 ≤ Ui, Vi ≤ 1000

Output Format

第一行:单个整数,表示起点为S,终点为E,且恰好经过N段路的最短路线长度

------------------------------------------------------

正解 = 最短路+倍增+(貌似有个很傻的离散- =)

注意道题目中的 N 比较大,T却很小- =,

由于 Ui 与 Vi 的范围比 T 还大,显然中间有许多无用的点

离散之,

注意道题目中的 N 比较大,T却很小- =,

这说明一个点会被经过多次(显然),

原本最短路只能得到任意两点 i,j 的距离dis[i][j],

在这个基础上加一维 dis[i][j][k] 表示 i 到 j 且经过2k条路径的最短路径,

转移于folyed有些类似 dis[i][j][k]=dis[i][p][k-1]+dis[p][j][k-1](p为图中的点)

将 N 转为2进制 设为 T2,设f[i][j]为 从起点S 到 i 这个点经过了 (T2从左往右数j个1达到的值)条路径

f[i][j]=f[k][j-1]+dis[i][k][p](k为图中点)(p为 2^p

f[终点][T2 中 1 的个数]即为所求答案- =

Ps.好吧,我承认我表达能力挺拙计的- =

代码如下:

  1. #include<cstring>
  2. #include<algorithm>
  3. #include<cstdio>
  4. #include<string>
  5. #include<iostream>
  6. #include<queue>
  7. #define INF 999999999
  8. #define min(x,y) if(x>y||x==-1) x=y
  9. int P,dis[][][],f[][],N,T,S,E;
  10. int O, ok[];
  11. void Do(){
  12. for(int p=;(<<p)<=N;p++)
  13. for(int i=;i<=O;i++)
  14. for(int j=;j<=O;j++)
  15. for(int k=;k<=O;k++)
  16. if(dis[i][j][p]>dis[i][k][p-]+dis[k][j][p-])
  17. dis[i][j][p]=dis[i][k][p-]+dis[k][j][p-];
  18. }
  19. void Dp(){
  20. for(int i=;i<=;i++)
  21. for(int k=;k<=;k++)
  22. f[i][k]=INF;
  23. f[ok[S]][]=;
  24. int k=,p=;
  25. while(N){
  26. if(N&){
  27. ++k;
  28. for(int i=;i<=O;i++)
  29. for(int j=;j<=O;j++)
  30. if(f[i][k]>f[j][k-]+dis[i][j][p])
  31. f[i][k]=f[j][k-]+dis[i][j][p];
  32. }
  33. N>>=;
  34. ++p;
  35. }
  36. printf("%d",f[ok[E]][k]);
  37. }
  38. int main(){
  39. scanf("%d%d%d%d",&N,&T,&S,&E);
  40. for(int i=;i<=;i++)
  41. for(int j=;j<=;j++)
  42. for(int k=;k<=;k++)
  43. dis[i][j][k]=INF;
  44. for(int i=;i<=T;i++){
  45. int u,v,t;
  46. scanf("%d%d%d",&t,&u,&v);
  47. if(!ok[u]) ok[u]=++O;
  48. if(!ok[v]) ok[v]=++O;
  49. dis[ok[u]][ok[v]][]=dis[ok[v]][ok[u]][]=t;
  50. }
  51. Do();
  52. Dp();
  53. }

usaco 奶牛接力的更多相关文章

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

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

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

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

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

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

  4. USACO 奶牛抗议 Generic Cow Protests

    USACO 奶牛抗议 Generic Cow Protests Description 约翰家的N头奶牛聚集在一起,排成一列,正在进行一项抗议活动.第i头奶牛的理智度 为Ai,Ai可能是负数.约翰希望 ...

  5. [USACO]奶牛会展(背包)

    [USACO]奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览. ...

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

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

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

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

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

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

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

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

随机推荐

  1. MySQL分库分表备份脚本

    MySQL分库备份脚本 #脚本详细内容 [root@db02 scripts]# cat /server/scripts/Store_backup.sh #!/bin/sh MYUSER=root M ...

  2. jQuery DataTables 插件使用笔记

    初始化 在页面中 <!DOCTYPE html> <html> <head> <link rel="stylesheet" type=&q ...

  3. php购物车原理

    <?php/*购物车原理在产品展示页面时(如 shop.php?id=888),点击购买或添加到购物车时,根据相应的产品标识符(如 id),查询相应的数据库,如果查询表示有此产品,用 $_SES ...

  4. php MVC 及例子解释

    根据http://www.21ds.net/article/4/453改写: MVC模式在网站架构中十分常见.它允许我们建立一个三层结构的应用程式,从代码中分离出有用的层,帮助设计师和开发者协同工作以 ...

  5. React组件一

    <div id='test'></div> <script type='text/babel'> var Zu=React.createClass({ return ...

  6. php文件锁解决少量并发问题

    阻塞(等待)模式: <?php $fp = fopen("lock.txt", "r"); if(flock($fp,LOCK_EX)) { //..处理 ...

  7. PHP利器-WAMPServer

    为了配置memcacheAdmin,牵涉到搭建PHP的环境,使用的是WAMPServer,安装之后,需要对apache进行配置, 端口,需要将wamp\bin\apache\Apache2.2.21\ ...

  8. Xcode报错 - 1

    1. xcode在真机调试的时候出现"The identity used to sign the executable is no longer valid" 解析: 是由于.pr ...

  9. 集成Facebook和Twitter的Model动画-b

    这个动画.  感谢大神分享 JPPopPresentAnimation.gif 要实现这个功能分两步走:第一步,先实现这个动画.第二步,0行代码集成到项目.也就是,你不用改原有项目的任何代码,只要把写 ...

  10. C#中通过调用Dll函数时,执行一段时间后,就会报内存可能被破坏的错的解决办法

    遇到同样的问题,已经解决的:http://blog.csdn.net/youxiazzz12/article/details/24313347