Shortest Path(hdu5636)
Shortest Path
有一条长度为nn的链. 节点ii和i+1i+1之间有长度为11的边. 现在又新加了3条边, 每条边长度都是1. 给出mm个询问, 每次询问两点之间的最短路.
输入包含多组数据. 第一行有一个整数TT, 表示测试数据的组数. 对于每组数据: 第一行包含2个整数nn和mm (1 \le n,m \le 10^5)(1≤n,m≤105)表示节点的数目和询问数目. 接下来一行包含66个有空格分开的整数a_1, b_1, a_2, b_2, a_3, b_3a1,b1,a2,b2,a3,b3 (1 \le a_1,a_2,a_3,b_1,b_2,b_3 \le n)(1≤a1,a2,a3,b1,b2,b3≤n), 表示新加的三条边为(a_1,b_1)(a1,b1), (a_2,b_2)(a2,b2), (a_3,b_3)(a3,b3). 接下来mm行, 每行包含两个整数s_isi和t_iti (1 \le s_i, t_i \le n)(1≤si,ti≤n), 表示一组询问. 所有数据中mm的和不超过10^6106.
对于每组数据, 输出一个整数S=(\displaystyle\sum_{i=1}^{m} i \cdot z_i) \text{ mod } (10^9 + 7)S=(i=1∑mi⋅zi) mod (109+7), 其中z_izi表示第ii组询问的答案.
1
10 2
2 4 5 7 8 10
1 5
3 1
7
思路:因为在每加入这些边之前我们知道任意两点最短距离是abs(a-b);
那么我们每次要询问两个点之间的最短路,所以我们可以把新加的边和询问的边中两个点拿出来离散化下
然后建图加边,然后直接最短路即可,复杂度为O(m*8*8)。
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<stdlib.h>
5 #include<string.h>
6 #include<map>
7 using namespace std;
8 typedef long long LL;
9 int flag[10];
10 const LL N=1e9+7;
11 int cmp(const void*p,const void*q);
12 typedef struct pp
13 {
14 LL x;
15 int id;
16 }ss;
17 ss aa[10];
18 LL d[10];LL ma[10][10];
19 LL num[10];LL bum[10];
20 void dij(int n,int ans);
21 int main(void)
22 {
23 LL i,j,k,p,q;
24 scanf("%lld",&k);
25 while(k--)
26 {
27 scanf("%lld %lld",&p,&q);
28 for(i=0;i<6;i++)
29 {
30 scanf("%lld",&num[i]);
31 }LL sum=0;LL a=0;
32 while(q--)
33 { a++;
34 scanf("%lld %lld",&num[6],&num[7]);
35 LL ans=1;
36 for(i=0;i<8;i++)
37 {
38 aa[i].x=num[i];
39 aa[i].id=i;
40 }qsort(aa,8,sizeof(ss),cmp);
41 bum[aa[0].id]=1;
42 for(i=1;i<8;i++)
43 {
44 if(aa[i].x!=aa[i-1].x)
45 ans++;
46 bum[aa[i].id]=ans;
47 }
48 for(i=0;i<10;i++)
49 {
50 for(j=0;j<10;j++)
51 {
52 ma[i][j]=N;
53 }
54 }
55 ma[bum[0]][bum[1]]=ma[bum[1]][bum[0]]=1;
56 ma[bum[2]][bum[3]]=ma[bum[3]][bum[2]]=1;
57 ma[bum[4]][bum[5]]=ma[bum[5]][bum[4]]=1;
58 for(i=0;i<8;i++)
59 {
60 for(j=0;j<8;j++)
61 {
62 LL x=bum[i];
63 LL y=bum[j];
64 ma[x][y]=min(ma[x][y],abs(num[i]-num[j]));
65 }
66 }
67 dij(bum[6],ans);sum=(sum%N+d[bum[7]]*a%N)%N;
68 }printf("%lld\n",sum);
69 }return 0;
70 }
71
72 void dij(int n,int ans)
73 {
74 fill(d,d+10,N);
75 memset(flag,0,sizeof(flag));
76 d[n]=0;int i,j;
77 while(true)
78 {
79 int l=-1;
80 for(i=1;i<=ans;i++)
81 {
82 if((l==-1||d[l]>d[i])&&!flag[i])
83 {
84 l=i;
85 }
86 }if(l==-1)
87 break;
88 flag[l]=1;
89 for(i=1;i<=ans;i++)
90 {
91 d[i]=min(ma[l][i]+d[l],d[i]);
92 }
93 }
94 }
95 int cmp(const void*p,const void*q)
96 {
97 ss*n=(ss*)p;
98 ss*m=(ss*)q;
99 return n->x>m->x?1:-1;
100 }
Shortest Path(hdu5636)的更多相关文章
- hdu 3631 Shortest Path(Floyd)
题目链接:pid=3631" style="font-size:18px">http://acm.hdu.edu.cn/showproblem.php?pid=36 ...
- HDU 5636 Shortest Path(Floyd)
题目链接 HDU5636 n个点,其中编号相邻的两个点之间都有一条长度为1的边,然后除此之外还有3条长度为1的边. m个询问,每次询问求两个点之前的最短路. 我们把这三条边的6个点两两算最短路, 然 ...
- HDU-3631 Shortest Path (floyd)
Description When YY was a boy and LMY was a girl, they trained for NOI (National Olympiad in Informa ...
- Leetcode 943. Find the Shortest Superstring(DP)
题目来源:https://leetcode.com/problems/find-the-shortest-superstring/description/ 标记难度:Hard 提交次数:3/4 代码效 ...
- Java Learning Path(四) 方法篇
Java Learning Path(四) 方法篇 Java作为一门编程语言,最好的学习方法就是写代码.当你学习一个类以后,你就可以自己写个简单的例子程序来运行一下,看看有什么结果,然后再多调用几个类 ...
- Java Learning Path(五)资源篇
Java Learning Path(五)资源篇 1. http://java.sun.com/ (英文) Sun的Java网站,是一个应该经常去看的地方.不用多说. 2.http://www-900 ...
- Java Learning Path(三)过程篇
Java Learning Path(三)过程篇 每个人的学习方法是不同的,一个人的方法不见得适合另一个人,我只能是谈自己的学习方法.因为我学习Java是完全自学的,从来没有问过别人,所以学习的过程基 ...
- ZOJ 2760 How Many Shortest Path(最短路径+最大流)
Description Given a weighted directed graph, we define the shortest path as the path who has the sma ...
- 74(2B)Shortest Path (hdu 5636) (Floyd)
Shortest Path Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
随机推荐
- Vulnstack内网靶场5
实验环境搭建 漏洞详情 (qiyuanxuetang.net) "此次靶场虚拟机共用两个,一个外网一个内网,用来练习红队相关内容和方向,主要包括常规信息收集.Web攻防.代码审计.漏洞利用. ...
- vue-cli2嵌入html
1.使用iframe <!-- 相对路径/绝对路径 --> <iframe src="../../../static/zsw.html"></ifra ...
- 【编程思想】【设计模式】【行为模式Behavioral】command
Python版 https://github.com/faif/python-patterns/blob/master/behavioral/command.py #!/usr/bin/env pyt ...
- 用oracle中的Row_Number实现分页
Row_Number实现分页 1:首先是 select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1 生成带序号 ...
- DuiLib逆向分析の按钮事件定位
目录 DuiLib逆向分析の按钮事件定位 0x00 前言 DuiLib介绍 DuiLib安装 DuiLib Hello,World! Duilib逆向分析之定位按钮事件 碎碎念 第一步:获取xml布局 ...
- Linux 文件权限、系统优化
目录 Linux 文件权限.系统优化 1.文件权限的详细操作 1.简介: 2.命令及归属: 3.权限对于用户和目录的意义 权限对于用户的意义: 权限对于目录的意义: 4.创建文件/文件夹的默认权限来源 ...
- 02-多任务-thread
多任务-Thread 一.理解并行与并发 并行:cpu数多于任务数 例如: 一共有三个任务,分别是:QQ.微信.陌陌:一共有四个CPU,每个任务占据一个CPU. 并发:CPU数少于任务数 例如: 一共 ...
- Hive实战UDF 外部依赖文件找不到的问题
目录 关于外部依赖文件找不到的问题 为什么要使用外部依赖 为什么idea 里面可以运行上线之后不行 依赖文件直接打包在jar 包里面不香吗 学会独立思考并且解决问题 继承DbSearcher 读取文件 ...
- [BUUCTF]PWN——mrctf2020_easyoverflow
mrctf2020_easyoverflow 附件 步骤: 例行检查,64位程序,保护全开 本地试运行的时候就直接一个输入,然后就没了,直接用64位ida打开 只要满足18行的条件,就能够获取shel ...
- windows10 安装 Mysql8.0
目录 1.Mysql8.0下载 2.配置环境变量 3.在安装目录下创建my.ini文件 4 初始化Mysql 5 安装至系统服务 6 更改密码 1.Mysql8.0下载 2.配置环境变量 将下载后文件 ...