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思想,将所有的边先按照权值排一个序,然后依次将边加入进去更新,每条边只更新一次,为了保证得到的路径是边权递增的,每 ...
随机推荐
- HTML标签速记整理W3C
标题 <h1>段落<p>链接< href="">图像<img src="">自关闭元素,不需要结束标记换行标志& ...
- 前端基础-HTTP协议
一. HTTP协议简介 二. HTTP协议之请求Request 三. HTTP协议之响应Response 四. HTTP协议完整工作流程 五. HTTP协议关键性总结 六.自定义套接字分析HTTP协议 ...
- 数据采集与分析的那些事——从数据埋点到AB测试
作者:网易有数郑栋. 一.为什么企业需要一套完善的用户行为埋点和分析平台 产品初创期间,需要分析天使用户的行为来改进产品,甚至从用户行为中得到新的思路或发现来调整产品方向:产品成长过程,通过对用户行为 ...
- python-类(1)
·类(Class) 笔记: Python是一种面向对象(Object Oriented)的编程语言,类(Class)是Python的核心概念.在Python中,不管是列表.字符串.函数和类都是对象. ...
- Python学习 :面向对象(一)
面向对象 一.定义 面向对象:面向对象为类和对象之间的应用 class + 类名: #在类中的函数称作 “方法“ def + 方法名(self,arg): #方法中第一个参数必须是 self prin ...
- BurpSuite—-Scanner模块(漏洞扫描)
一.简介 Burp Scanner 是一个进行自动发现 web 应用程序的安全漏洞的工具.它是为渗透测试人员设计的,并且它和你现有的手动执行进行的 web 应用程序半自动渗透测试的技术方法很相似. 使 ...
- Hadoop学习(一)
今天刚刚从hadoop网址下载了edition 0.21,上传到公司内网 server上试了一把. 跟着官方网站走了一趟,在执行 Format a new distributed-filesystem ...
- Linux下IPC机制
Linux下IPC机制 实践要求 研究Linux下IPC机制:原理,优缺点,每种机制至少给一个示例,提交研究博客的链接 共享内存 管道 FIFO 信号 消息队列 IPC 进程间通信(IPC,Inter ...
- 【LG4317】花神的数论题
[LG4317]花神的数论题 题面 洛谷 题解 设\(f_{i,up,tmp,d}\)表示当前在第\(i\)位,是否卡上界,有\(tmp\)个一,目标是几个一的方案数 最后将所有\(d\)固定,套数位 ...
- [WC2010]重建计划 长链剖分
[WC2010]重建计划 LG传送门 又一道长链剖分好题. 这题写点分治的人应该比较多吧,但是我太菜了,只会长链剖分. 如果你还不会长链剖分的基本操作,可以看看我的长链剖分总结. 首先一看求平均值最大 ...