HDU 5636 Shortest Path
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5636
题解:
1、暴力枚举:

#include<cmath>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std; typedef long long LL;
const int maxn = 1e5 + ;
const int mod = 1e9 + ; int n, m;
int a[], b[]; int main() {
int T;
scanf("%d", &T);
while (T--) {
scanf("%d%d", &n, &m);
for (int i = ; i < ; i++) scanf("%d%d", a + i, b + i);
LL ans = ;
int x, y;
for (int i = ; i <= m; i++) {
scanf("%d%d", &x, &y);
//一条新路线都不走
int tmp = abs(x - y); //只走一条
for (int j = ; j < ; j++) {
tmp = min(tmp, abs(x - a[j]) + abs(b[j] - y) + );
tmp = min(tmp, abs(x - b[j]) + abs(a[j] - y) + );
} //走两条
for (int j = ; j < ; j++) {
for (int k = ; k < ; k++) {
if (j == k) continue;
//x -> j开头 -> j结尾 -> k开头 -> k结尾 -> y
tmp = min(tmp, abs(x - a[j]) + abs(b[j] - a[k]) + abs(b[k] - y) + );
//x -> j开头 -> j结尾 -> k结尾 -> k开头 -> y
tmp = min(tmp, abs(x - a[j]) + abs(b[j] - b[k]) + abs(a[k] - y) + );
//x -> j结尾 -> j开头 -> k开头 -> k结尾 -> y
tmp = min(tmp, abs(x - b[j]) + abs(a[j] - a[k]) + abs(b[k] - y) + );
//x -> j结尾 -> j开头 -> k结尾 -> k开头 -> y
tmp = min(tmp, abs(x - b[j]) + abs(a[j] - b[k]) + abs(a[k] - y) + );
}
} //走三条
for (int j = ; j < ; j++) {
for (int k = ; k < ; k++) {
if (j == k) continue;
for (int w = ; w < ; w++) {
if (w == j || w == k) continue;
tmp = min(tmp, abs(x - a[j]) + abs(b[j] - a[k]) + abs(b[k] - a[w]) + abs(b[w] - y) + );
tmp = min(tmp, abs(x - a[j]) + abs(b[j] - a[k]) + abs(b[k] - b[w]) + abs(a[w] - y) + );
tmp = min(tmp, abs(x - a[j]) + abs(b[j] - b[k]) + abs(a[k] - a[w]) + abs(b[w] - y) + );
tmp = min(tmp, abs(x - a[j]) + abs(b[j] - b[k]) + abs(a[k] - b[w]) + abs(a[w] - y) + ); tmp = min(tmp, abs(x - b[j]) + abs(a[j] - a[k]) + abs(b[k] - a[w]) + abs(b[w] - y) + );
tmp = min(tmp, abs(x - b[j]) + abs(a[j] - a[k]) + abs(b[k] - b[w]) + abs(a[w] - y) + );
tmp = min(tmp, abs(x - b[j]) + abs(a[j] - b[k]) + abs(a[k] - a[w]) + abs(b[w] - y) + );
tmp = min(tmp, abs(x - b[j]) + abs(a[j] - b[k]) + abs(a[k] - b[w]) + abs(a[w] - y) + );
}
}
}
ans += ((LL)i*tmp)%mod;
ans %= mod;
}
printf("%lld\n", ans);
}
return ;
}
2、floyd:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL; const int maxn = 1e5 + ;
const int mod = 1e9 + ;
const int INF = 0x3f3f3f3f; int n, m;
int a[],mat[][]; void init() {
memset(mat, 0x3f, sizeof(mat));
for (int i = ; i < ; i++) mat[i][i] = ;
} int main() {
int tc;
scanf("%d", &tc);
while (tc--) {
init();
scanf("%d%d", &n, &m);
for (int i = ; i < ; i++) {
scanf("%d%d", a + i, a + i + );
}
//新图
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
mat[i][j] = abs(a[i] - a[j]);
}
}
for (int i = ; i < ; i++) {
mat[i][i + ] = mat[i + ][i] = ;
}
//floyd
for (int k = ; k < ; k++) {
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
mat[i][j] = min(mat[i][j], mat[i][k] + mat[k][j]);
}
}
}
LL ans = ;
for (int i = ; i <= m; i++) {
int x, y;
scanf("%d%d", &x, &y);
LL z = abs(x-y);
//枚举所有情况
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
int tmp = abs(x - a[i]) + mat[i][j] + abs(a[j] - y);
z = min(z, (LL)tmp);
}
}
ans += z*i;
ans %= mod;
}
printf("%lld\n", ans);
}
return ;
}
HDU 5636 Shortest Path的更多相关文章
- HDU 5636 Shortest Path 暴力
Shortest Path 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5636 Description There is a path graph ...
- HDU 5636 Shortest Path(Floyed,枚举)
Shortest Path Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tot ...
- HDU 5636 Shortest Path 分治+搜索剪枝
题意:bc round 74 分析(官方题解): 你可以选择分类讨论, 但是估计可能会写漏一些地方. 只要抽出新增边的端点作为关键点, 建立一个新图, 然后跑一遍floyd就好了. 复杂度大概O(6^ ...
- HDU 5636 Shortest Path(Floyd)
题目链接 HDU5636 n个点,其中编号相邻的两个点之间都有一条长度为1的边,然后除此之外还有3条长度为1的边. m个询问,每次询问求两个点之前的最短路. 我们把这三条边的6个点两两算最短路, 然 ...
- hdu 3631 Shortest Path(Floyd)
题目链接:pid=3631" style="font-size:18px">http://acm.hdu.edu.cn/showproblem.php?pid=36 ...
- HDU - 3631 Shortest Path(Floyd最短路)
Shortest Path Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u SubmitStat ...
- HDU - 4725_The Shortest Path in Nya Graph
The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- hdu 3631 Shortest Path
floyd算法好像很奇妙的样子.可以做到每次加入一个点再以这个点为中间点去更新最短路,效率是n*n. #include<cstdio> #include<cstring> #i ...
- HDU 4479 Shortest path 带限制最短路
题意:给定一个图,求从1到N的递增边权的最短路. 解法:类似于bellman-ford思想,将所有的边先按照权值排一个序,然后依次将边加入进去更新,每条边只更新一次,为了保证得到的路径是边权递增的,每 ...
随机推荐
- npm run build 时报错operation not permitted
1.项目使用vue框架,在npm run build 打包时报错: 访问对应的目录,发现无法打开,原来是文件被其他应用程序占用了,仔细看了一下,xftp文件传输的软件打开着,把它关闭以后,重新运行np ...
- 写 5 个你知道的 HTML5 标签,说明他们的意义
1:<canvas>标签 定义图形.图像,是基于javascript的绘图API 2:<video>标签 定义视频 3:<audio>标签 定义音频内容 ...
- Python - 入门基础(一)
1.解释器路径 #!/usr/bin/env python 2.编码 # -*- coding:utf8 -*- 1.ascill ---00000000 (8个位表示) 缺点:表示不了英文 2.u ...
- UART学习之路(一)基本概念
第一篇博客,首先记录一下这一个多星期来的学习内容. UART学习之路第一篇,是UART的基本概念介绍.后续会用STM32F103的串口与PC机通信.最后使用Verilog HDL写出串口发送模块和接收 ...
- 20155231 2016-2017-2 《Java程序设计》第4周学习总结
20155231 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 学习目标 理解封装.继承.多态的关系 理解抽象类与接口的区别 掌握S.O.L.I.D原则 了 ...
- C语言第三周
一. 字符串常量 只要有一对双引号括起来的字符序列就是字符串常量.列如"hello"接"123" 注意:"a"是字符串常量'a'是字符常量. ...
- 20155322 2016-2017-2 《Java程序设计》实验一 Java开发环境的熟悉(macOS + Eclipse)
20155322 2016-2017-2 <Java程序设计>实验一 Java开发环境的熟悉(macOS + Eclipse) 实验目的与内容 熟悉命令行开发环境. 使用vim等文本编译器 ...
- 20145234黄斐《网络对抗技术》实验五,MSF基础应用
MSF的六种模块 渗透攻击模块(Exploit Modules)渗透攻击是指由攻击者或渗透测试者利用一个系统.应用或服务中的==安全漏洞==,所进行的攻击行为. 辅助模块(Auxiliary Modu ...
- mysql的启动,停止与重启
启动mysql:方式一:sudo /etc/init.d/mysql start 方式二:sudo start mysql方式三:sudo service mysql start 停止mysql:方式 ...
- 使用Python进行分布式系统协调 (ZooKeeper/Consul/etcd)
来源:naughty 链接:my.oschina.net/taogang/blog/410864 笔者之前的博文提到过,随着大数据时代的到来,分布式是解决大数据问题的一个主要手段,随着越来越多的分布式 ...