Shortest Path

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 627    Accepted Submission(s): 204

Problem Description
There is a path graph G=(V,E) with n vertices. Vertices are numbered from 1 to n and there is an edge with unit length between i and i+1 (1≤i<n). To make the graph more interesting, someone adds three more edges to the graph. The length of each new edge is 1.

You are given the graph and several queries about the shortest path between some pairs of vertices.

 
Input
There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases. For each test case:

The first line contains two integer n and m (1≤n,m≤105) -- the number of vertices and the number of queries. The next line contains 6 integers a1,b1,a2,b2,a3,b3 (1≤a1,a2,a3,b1,b2,b3≤n), separated by a space, denoting the new added three edges are (a1,b1), (a2,b2), (a3,b3).

In the next m lines, each contains two integers si and ti (1≤si,ti≤n), denoting a query.

The sum of values of m in all test cases doesn't exceed 106.

 
Output
For each test cases, output an integer S=(∑i=1mi⋅zi) mod (109+7), where zi is the answer for i-th query.
 
Sample Input
1 10 2 2 4 5 7 8 10 1 5 3 1
 
Sample Output
7
 
Source

如果想做出这道题, 重要的是思路和知识的熟练掌握, Floyd模板并不难, 但怎么将它巧妙的用到了题中是值得思考的问题,还是自己掌握的不熟练, 一看别人的就懂, 但让自己写却毫无头绪

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <cmath>
#include <iostream> using namespace std; #define MOD (1000000000+7) int main()
{
int T;
scanf("%d", &T); while(T--)
{
int n, m, i, j, k, l, r, u, v, a[10];
int dp[10][10];
long long res=0, len; scanf("%d%d", &n, &m); for(i=1; i<=6; i++)
scanf("%d", &a[i]); for(i=1; i<=6; i++) ///相当于对dp初始化
for(j=1; j<=6; j++)
dp[i][j] = abs(a[i]-a[j]); if(a[1]!=a[2]) dp[1][2] = dp[2][1] = 1; ///如果两点不相等的话就让两点的距离为1
if(a[3]!=a[4]) dp[3][4] = dp[4][3] = 1;
if(a[5]!=a[6]) dp[5][6] = dp[6][5] = 1; for(k=1; k<=6; k++)
for(i=1; i<=6; i++)
for(j=1; j<=6; j++)
dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j]); for(i=1; i<=m; i++)
{
scanf("%d%d", &l, &r);
len = abs(l-r); for(u=1; u<=6; u++)
for(v=1; v<=6; v++)
len = min(len, (long long)(abs(a[u]-l)+dp[u][v]+abs(a[v]-r))); res = (res+len*i)%MOD;
} printf("%I64d\n", res); }
return 0;
}

74(2B)Shortest Path (hdu 5636) (Floyd)的更多相关文章

  1. HDU 5636 关键点的 floyd 最短路问题

    Shortest Path Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  2. JAVA之单源最短路径(Single Source Shortest Path,SSSP问题)dijkstra算法求解

    题目简介:给定一个带权有向图,再给定图中一个顶点(源点),求该点到其他所有点的最短距离,称为单源最短路径问题. 如下图,求点1到其他各点的最短距离 准备工作:以下为该题所需要用到的数据 int N; ...

  3. 单源最短距离 Single Source Shortest Path

    单源最短距离_示例程序_图模型_用户指南_MaxCompute-阿里云 https://help.aliyun.com/document_detail/27907.html 单源最短距离 更新时间:2 ...

  4. HDU 4725 The Shortest Path in Nya Graph (最短路 )

    This is a very easy problem, your task is just calculate el camino mas corto en un grafico, and just ...

  5. 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 ...

  6. 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 ...

  7. HDU 4725 The Shortest Path in Nya Graph(最短路径)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)

    Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...

  8. 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 ...

  9. hdu 3631 Shortest Path(Floyd)

    题目链接:pid=3631" style="font-size:18px">http://acm.hdu.edu.cn/showproblem.php?pid=36 ...

随机推荐

  1. input 原生上传文件(type = file)

    1.表单上传文件的步骤: - 1)设置enctype 默认为:enctype="application/x-www-form-urlencoded"(一般不设置) 若要表单中有需要 ...

  2. 初次搭建spring-boot 整合ssm(有许多小坑)

    首先,我是采用官网下载,版本最好选择1.5.16的(这是重点) 下载完毕后,用idea打开解压后的项目. 1.整合spring-mvc 在pom.xml中加入web依赖 <dependency& ...

  3. 8M - 三角形

    用N个三角形最多可以把平面分成几个区域?  Input 输入数据的第一行是一个正整数T(1<=T<=10000),表示测试数据的数量.然后是T组测试数据,每组测试数据只包含一个正整数N(1 ...

  4. CF Round #509 (Div. 2)

    前言:第一次打\(CF\),因为经验不足以及英语水平很烂,即便在机房大佬的带领下也是花了好久才读懂题目..\(A\)题直到\(11\)分钟才\(A\),题目一共才做了\(4\)题,太菜了.. A. H ...

  5. 20172325 2018-2019-2 《Java程序设计》第五周学习总结

    20172325 2018-2019-2 <Java程序设计>第五周学习总结 教材学习内容总结 本次学习第九章内容,主要学习查找和排序. 查找 查找的定义:是一个过程,即在某个项目组中寻找 ...

  6. C++ 的虚析构函数

    当一个基类的指针指向一个派生类的对象,并用该基类的指针去删除或者析构派生类对象时,如果基类的析构函数不是声明为虚函数,那么在析构时基类的析构函数将会被直接调用,派生类的析构函数应为没被调用而导致内存泄 ...

  7. qt小程序

    hello: #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApp ...

  8. netstat 查看端口命令

    查看特定端口是否启动 netstat -lnp |

  9. WCF路由服务

    代码下载: 链接:https://pan.baidu.com/s/1i76Ht0lMWmosaCrDjaA2cA 密码:muj11.新建类库 Service.Interface using Syste ...

  10. VisualStudio2017密钥(key)我随便输入一下居然通过了?????????!!!!!!!!!!!!

    VisualStudio2017密钥(key) 2017年12月30日 14:41:38 阅读数:5048 professional:KBJFW-NXHK6-W4WJM-CRMQB-G3CDH ent ...