哈哈哈哈,我就知道这道题目再扔给我,我还是不会,就是这么菜,哈哈哈

一开始官方题解就没搞懂…然后就看了一下别人的代码,水水过就算了。今天拿到…GG;

题意:

一开始,有一张原图,有一条长度为n的链. 节点i和i+1之间有长度为1的边.

现在又新加了3条边, 每条边长度都是1. 给出m个询问, 每次询问两点之间的最短路.

然后让你算出对于每组数据, 输出一个整数S=(∑i=1mi⋅zi) mod (109+7), 其中zi表示第i

组询问的答案.

官方题解:

你可以选择分类讨论, 但是估计可能会写漏一些地方. 只要抽出新增边的端点作为关键点, 建立一个新图, 然后跑一遍floyd就好了. 复杂度大概O(6^2⋅m)

然后继续摸着摸着发现,也可以说是感觉到。

我们在一个用领接矩阵所存储的图中,求一个点到一个点的最短距离,无非就是min(两点间直接多长,点1经过一些最短路到达点2);

这一题让我体会很多:

第一:

利用一个图来进行操作,那么无可厚非这个图里面点之间的距离就是最短距离。建图啊建图,这只是个初始化的过程,在第二遍拿起这道题的时候还是错了。

第二:

利用图这个过程,那么就是经过与不经过的问题;还有这道题目让我体会最深的就是怎么经过,在纸上画了一下,瞬间爆炸,我floyd的精华一点都不知道啊!

过程,过程!!!

这道题目显示了自己:1,基础差! 2,floyd算法没理解!还是太菜,太菜。

  1. #include<cstdio>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<iostream>
  5. using namespace std;
  6. typedef long long LL;
  7. LL mod=1e9+7;
  8. LL INF=0x3f3f3f3f;
  9. int n;
  10. LL bmap[10][10];
  11. LL cp[110];
  12. void init()
  13. {
  14. for(int i=0; i<6; i++)
  15. {
  16. for(int j=0; j<6; j++)
  17. {
  18. bmap[i][j]=bmap[j][i]=abs(cp[i]-cp[j]);
  19. }
  20. }
  21. }
  22. void debug()
  23. {
  24. for(int i=0; i<6; i++)
  25. {
  26. for(int j=0; j<6; j++)
  27. printf("%d ",bmap[i][j]);
  28. printf("\n");
  29. }
  30. }
  31. void floyd()
  32. {
  33. int k,i,j;
  34. for(k=0; k<6; k++)
  35. {
  36. for(i=0; i<6; i++)
  37. {
  38. for(j=0; j<6; j++)
  39. {
  40. bmap[i][j]=min(bmap[i][j],bmap[i][k]+bmap[k][j]);
  41. }
  42. }
  43. }
  44. }
  45. int main()
  46. {
  47. int T;
  48. scanf("%d",&T);
  49. while(T--)
  50. {
  51. int num;
  52. scanf("%d%d",&n,&num);
  53. for(int i=0; i<6; i++)
  54. {
  55. scanf("%d",&cp[i]);
  56. }
  57. init();
  58. bmap[0][1]=bmap[1][0]=1;
  59. bmap[2][3]=bmap[3][2]=1;
  60. bmap[4][5]=bmap[5][4]=1;
  61. //建图,要想在一张图上进行操作,则所必须的就是保证这张图就是最完美(最短路)的图,所以跑一下floyd;
  62. floyd();
  63. // debug();
  64. LL ans=0;
  65. for(int p=1; p<=num; p++)
  66. {
  67. int u,v;
  68. scanf("%d%d",&u,&v);
  69. LL sum=abs(u-v);
  70. for(int i=0; i<6; i++)
  71. {
  72. for(int j=0; j<6; j++) //跑一跑最短路
  73. {
  74. sum=min(sum,abs(u-cp[i])+abs(v-cp[j])+bmap[i][j]);
  75. sum=min(sum,abs(v-cp[i])+abs(u-cp[j])+bmap[i][j]);
  76. }
  77. }
  78. ans=(ans+(p*sum)%mod)%mod;
  79. }
  80. printf("%lld\n",ans);
  81. }
  82. return 0;
  83. }

BestCoder Round #74 (div.1) 1002Shortest Path(hdoj5636)的更多相关文章

  1. hdu 5636 搜索 BestCoder Round #74 (div.2)

    Shortest Path  Accepts: 40  Submissions: 610  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: ...

  2. hdu5635 BestCoder Round #74 (div.2)

    LCP Array  Accepts: 131  Submissions: 1352  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: 13 ...

  3. BestCoder Round #67 (div.2) N bulbs(hdu 5600)

    N bulbs Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  4. Codeforces Round #368 (Div. 2) B. Bakery (模拟)

    Bakery 题目链接: http://codeforces.com/contest/707/problem/B Description Masha wants to open her own bak ...

  5. BestCoder Round #74 (div.2)

    组合 1001 LCP Array 第一题就小难,出题的好像是浙大的大牛? 找到一个规律:a[i] = x, s[i..i+x]都想同.a[i] = a[i+1] + 1 (a[i] > 0), ...

  6. hdu 5637 BestCoder Round #74 (div.2)

    Transform  Accepts: 7  Submissions: 49  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: 131072 ...

  7. HDU5638 / BestCoder Round #74 (div.1) 1003 Toposort 线段树+拓扑排序

    Toposort   问题描述 给出nn个点mm条边的有向无环图. 要求删掉恰好kk条边使得字典序最小的拓扑序列尽可能小. 输入描述 输入包含多组数据. 第一行有一个整数TT, 表示测试数据组数. 对 ...

  8. Codeforces Round #284 (Div. 2) C题(计算几何)解题报告

    题目地址 简要题意: 给出两个点的坐标,以及一些一般直线方程Ax+B+C=0的A.B.C,这些直线作为街道,求从一点走到另一点需要跨越的街道数.(两点都不在街道上) 思路分析: 从一点到另一点必须要跨 ...

  9. Codeforces Round #262 (Div. 2) 460C. Present(二分)

    题目链接:http://codeforces.com/problemset/problem/460/C C. Present time limit per test 2 seconds memory ...

随机推荐

  1. Swift下调用Touch ID实现指纹识别

    iOS开发交流群:484884085 欢迎大家增加. 例如以下代码是实现调用5S以上设备指纹识别的代码,依照官网给出的代码,会出现识别成功后非常久才运行成功后调用的代码,逛了非常久的.才知道要将其放入 ...

  2. 很不错的js特效

    这里有好多的js特效:http://www.jsfoot.com/jquery/images/qh/ jquery图片特效 jquery幻灯片 .... 有什么js需要可以到这里来下载:http:// ...

  3. 【转载】分布式RPC框架性能大比拼

    dubbo.motan.rpcx.gRPC.thrift的性能比较 Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 ...

  4. C#3.0之神奇的Lambda表达式和Lambda语句

    “Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型.所有 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to” ...

  5. HDU 1060 Leftmost Digit (数学/大数)

    Leftmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  6. Python 包的制作(__init__.py)

    如何制作一个自己的包:首先,需要创建一个文件夹,将其作为顶层包,在此文件夹内我们可以定义各个不同的子文件夹与 .py 文件作为各个子包与模块注意:在每个包文件夹下都需要有一个 __init__.py ...

  7. QEMU+GDB调试方法

    两年前调试usb/ip开源项目时,就曾用虚拟机远程调试过Windows和Linux系统内核,当时在VMware Workstation上创建两个虚拟机进行调试,也没有记录下如何配置调试,只是大体的还记 ...

  8. MapReduce算法形式五:TOP—N

    案例五:TOP—N 这个问题比较常见,一般都用于求前几个或者后几个的问题,shuffle有一个默认的排序是正序的,但如果需要逆序的并且暂时还不知道如何重写shuffle的排序规则的时候就用以下方法就行 ...

  9. 阿里Java编程规范 学习笔记

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  10. 学习js所必须要知道的一些

    1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html->(head,body) 4. ...