题目链接  HDU5636

n个点,其中编号相邻的两个点之间都有一条长度为1的边,然后除此之外还有3条长度为1的边。

m个询问,每次询问求两个点之前的最短路。

我们把这三条边的6个点两两算最短路,

然后询问的时候用这6个点的距离来更新答案就可以了。

(不过听说好像有更好的方法,先占个坑)

时间复杂度$O(216m)$

#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b)	for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) typedef long long LL; const LL mod = 1e9 + 7; int T;
int n, m;
int a[10];
int b[10][10];
int d;
LL ans, cnt; int main(){ scanf("%d", &T);
while (T--){
scanf("%d%d", &n, &m);
rep(i, 1, 6) scanf("%d", a + i);
ans = 0;
cnt = 0; rep(i, 1, 6) rep(j, 1, 6) b[i][j] = abs(a[i] - a[j]); b[1][2] = b[2][1] = 1;
b[3][4] = b[4][3] = 1;
b[5][6] = b[6][5] = 1; rep(k, 1, 6) rep(i, 1, 6) rep(j, 1, 6)
b[i][j] = min(b[i][j], b[i][k] + b[k][j]); for (; m--; ){
scanf("%d%d", &a[7], &a[8]);
d = abs(a[7] - a[8]);
rep(i, 1, 6) rep(j, 1, 6)
d = min(d, abs(a[i] - a[7]) + abs(a[j] - a[8]) + b[i][j]); (ans += (++cnt) * (LL)d) %= mod;
}
printf("%lld\n", ans);
} return 0;
}

最新文章

  1. CodeForces #362 div2 B. Barnicle
  2. MVC 中的 ispostback
  3. 生成秘钥文件 sn.exe(Strong Name Tool)
  4. pip/matplot/pandas的安装和使用
  5. 基于注解的Spring AOP的配置和使用--转载
  6. Web大文件下载控件更新-Xproer.HttpDownloader
  7. Hazelcast介绍与使用
  8. mysql linux备份shell
  9. JQuery源码解析(九)
  10. 支持异步通知的globalfifo平台设备驱动程序及其测试代码
  11. [置顶] tar命令-linux
  12. if ,while ,for 的掌握
  13. C#绘图:带背景,拖鼠标画矩形和直线
  14. elasticsearch 集成springboot
  15. 20155222卢梓杰 实验一 逆向及Bof基础
  16. 【MySQL】MySQL支持的数据类型
  17. C#细说多线程(上)
  18. JMM随笔
  19. radio,checkbox,select,input text获取值,设置哪个默认选中
  20. 移动端absolute元素居中

热门文章

  1. Android之父Andy Rubin:被乔布斯羡慕嫉妒的天才
  2. 美可能排除中国大陆制造/生产的所有5G产品
  3. IP数据包的校验和算法
  4. JS原型链(一)
  5. logstash-基础操作
  6. input动态模糊查询的实现方式
  7. Lavarel的学习社区网站和框架优点
  8. C/C++编程之内存管理
  9. 循环链表的C风格实现(单向)
  10. 数据库---大数据+hadoop