Problem Statement

We have a directed graph with $N$ vertices, called Vertex $1$, Vertex $2$, $\ldots$, Vertex $N$.

For each pair of integers such that $1 \leq i, j \leq N$ and $i \neq j$, there is a directed edge from Vertex $i$ to Vertex $j$ of weight $(A_i + B_j) \bmod M$. (Here, $x \bmod y$ denotes the remainder when $x$ is divided by $y$.)

There is no edge other than the above.

Print the shortest distance from Vertex $1$ to Vertex $N$, that is, the minimum possible total weight of the edges in a path from Vertex $1$ to Vertex $N$.

Constraints

  • $2 \leq N \leq 2 \times 10^5$
  • $2 \leq M \leq 10^9$
  • $0 \leq A_i, B_j < M$
  • All values in input are integers.

Input

Input is given from Standard Input in the following format:

$N$ $M$
$A_1$ $A_2$ $\ldots$ $A_N$
$B_1$ $B_2$ $\ldots$ $B_N$

Output

Print the minimum possible total weight of the edges in a path from Vertex $1$ to Vertex $N$.


Sample Input 1

4 12
10 11 6 0
8 7 4 1

Sample Output 1

3

Below, $i \rightarrow j$ denotes the directed edge from Vertex $i$ to Vertex $j$.

Let us consider the path $1$ $\rightarrow$ $3$ $\rightarrow$ $2$ $\rightarrow$ $4$.

  • Edge $1\rightarrow 3$ weighs $(A_1 + B_3) \bmod M = (10 + 4) \bmod 12 = 2$,
  • Edge $3 \rightarrow 2$ weighs $(A_3 + B_2) \bmod M = (6 + 7) \bmod 12 = 1$,
  • Edge $2\rightarrow 4$ weighs $(A_2 + B_4) \bmod M = (11 + 1) \bmod 12 = 0$.

Thus, the total weight of the edges in this path is $2 + 1 + 0 = 3$.

This is the minimum possible sum for a path from Vertex $1$ to Vertex $N$.


Sample Input 2

10 1000
785 934 671 520 794 168 586 667 411 332
363 763 40 425 524 311 139 875 548 198

Sample Output 2

462

一道优化建图题.

观察到这里的取模最多只会减一次,所以与其说是取模,不如说当 \(a_i+b_j\ge m\) 时,代价减去 \(m\)。

先看如果没有取模,怎么做。一个经典的拆点,把一个点拆成内点和外点,外点向内点连代价为 \(b_i\) 的边,内点向外点连 \(a_i\) 的边。然后随便用0边把外点连起来。

但这样很明显不好扩展。注意到一件事,如果 \(a_i+b_j\ge m\),将点按照 \(b\) 排序后,\(k>j\) 的点的代价都要减去 \(m\)。所以将所有点按照 \(b\) 排序,然后仍然拆成内点和外点,外点从点 \(i\) 连向 \(i+1\),代价 \(b_{i+1}-b_i\)。内外点之间连 0 边。这个构图非常巧妙,如果从点 \(i\) 的内点向某一个点连了一条边权为 \(a_i+b_j-m\) 的边,这个内点到达任何一个 \(k>j\),都相当于有一条边权为 \(a_i+b_k-m\) 的边。对于一个内点,他先朝 \(1\) 的外点连一条边权为 \(a_i+b_1\) 的边,在二分出第一个 \(a_i+b_j\ge m\) 的点,连一条边权为 \(a_i+b_j-m\) 的边,就可以达到题目中的效果。

但这样好像有些点同时连了 \(a_i+b_j\) 和 \(a_i+b_j-m\) 的边?但其实不影响答案。因为题目求最短路。

所有的边权为正,可以跑dij.

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=4e5+5;
int n,b[N],e_num,m,u,v,hd[N],vis[N];
LL dis[N];
struct node{
int a,b,id;
bool operator<(const node&n)const{
return b<n.b;
}
}a[N];
struct edge{
int v,nxt,w;
}e[N<<3];
struct dian{
int v;
LL w;
bool operator<(const dian&d)const{
return w>d.w;
}
};
priority_queue<dian>q;
void add_edge(int u,int v,int w)
{
// printf("%d %d %d\n",u,v,w);
e[++e_num]=(edge){v,hd[u],w};
hd[u]=e_num;
}
void dijkstra(int s)
{
q.push((dian){s,0});
memset(dis,0x7f,sizeof(dis));
dis[s]=0;
while(!q.empty())
{
int k=q.top().v;
q.pop();
if(vis[k])
continue;
vis[k]=1;
for(int i=hd[k];i;i=e[i].nxt)
{
if(dis[e[i].v]>dis[k]+e[i].w)
{
dis[e[i].v]=dis[k]+e[i].w;
q.push((dian){e[i].v,dis[e[i].v]});
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i].a);
for(int i=1;i<=n;i++)
scanf("%d",&a[i].b),a[i].id=i;
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
b[i]=a[i].b;
for(int i=1;i<=n;i++)
{
// b[i]=a[i].b;
if(a[i].id==1)
u=i;
else if(a[i].id==n)
v=i;
add_edge(i+n,i,0);
add_edge(i,n+1,b[1]+a[i].a);
int k=lower_bound(b+1,b+n+1,m-a[i].a)-b;
// printf("%d %d\n",k,a[i].a);
if(k<=n)
add_edge(i,k+n,a[i].a+b[k]-m);
}
// printf("%d %d\n",u,v);
for(int i=1;i<n;i++)
add_edge(i+n,i+n+1,b[i+1]-b[i]);
dijkstra(u);
// for(int i=1;i<=n+n;i++)
// printf("%lld ",dis[i]);
printf("%lld",dis[v]);
return 0;
}

[ABC232G] Modulo Shortest Path的更多相关文章

  1. hdu-----(2807)The Shortest Path(矩阵+Floyd)

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

  2. zoj 2760 How Many Shortest Path 最大流

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1760 Given a weighted directed graph ...

  3. The Shortest Path in Nya Graph

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

  4. hdu 3631 Shortest Path(Floyd)

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

  5. Shortest Path(思维,dfs)

    Shortest Path  Accepts: 40  Submissions: 610  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: ...

  6. Shortest Path

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

  7. (中等) HDU 4725 The Shortest Path in Nya Graph,Dijkstra+加点。

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

  8. 【ZOJ2760】How Many Shortest Path

    How Many Shortest Path 标签: 网络流 描述 Given a weighted directed graph, we define the shortest path as th ...

  9. [Swift]LeetCode847. 访问所有节点的最短路径 | Shortest Path Visiting All Nodes

    An undirected, connected graph of N nodes (labeled 0, 1, 2, ..., N-1) is given as graph. graph.lengt ...

  10. OSPF(Open Shortest Path First)

    1.概述 路由协议OSPF全称为Open Shortest Path First,也就开放的最短路径优先协议,因为OSPF是由IETF开发的,所以所有厂商都可以用. OSPF的流量使用IP协议号. O ...

随机推荐

  1. [ABC126F] XOR Matching

    2023-01-07 题目 题目传送门 翻译 翻译 难度&重要性(1~10):1 题目来源 AtCoder 题目算法 位运算 解题思路 因为两个相同数异或为 \(0\),所以中间放一个 \(k ...

  2. Web通用漏洞--sql注入

    SQL注入 mysql注入目的:获取当前web权限 mysql注入--常规查询&union联合查询 MYSQL--Web组成架构 服务器搭建web服务可能存在多个站点搭建在一台服务器中,数据集 ...

  3. 《SQL与数据库基础》03. SQL-DML

    目录 DML 数据插入 数据删除 数据更新 本文以 MySQL 为例 DML 数据插入 给指定字段添加数据: INSERT INTO 表(字段1, 字段2, ......, 字段n) VALUES(值 ...

  4. 【项目源码】基于Spring + Spring MVC + MyBatis的图书馆管理系统

    基于Spring + Spring MVC + MyBatis的图书馆管理系统.主要功能包括:图书查询.图书管理.图书编辑.读者管理.图书的借阅与归还以及借还日志记录等​,非常适合学习研究. 运行配置 ...

  5. PHP判断是否是微信打开, 浏览器打开

    #问题 项目中遇到的问题, 如果用户是使用微信访问的. 那么进行友好提示"如何使用浏览器打开/告诉用户使用浏览器打开" 方案 useragent是浏览器标识, 带有一些客户信息. ...

  6. SQL - 5

    Smiling & Weeping ----我本不想和风讨论你,可风说可以替我去见你 第五章:SQL高级处理 5.1 窗口函数 5.1.1 窗口函数概念及基本的使用方法 窗口函数也称为OLAP ...

  7. IOS苹果应用IPA一键签名工具(苹果重签名,企业签名,Windows平台,时间控制)

    苹果应用IPA一键签名工具可以在windows平台对苹果应用IPA文件重新签名,无需MAC苹果电脑和配置XCODE开发环境,便可以直接对IPA文件进行签名,同时支持修改BundleID, 不受描述文件 ...

  8. elementui vue表单提交向别的组件传参失效 路由传参格式

    目录 表单提交向别的组件传参失效 路由传参格式 表单提交向别的组件传参失效 methods: { submitForm(formName) { this.$refs[formName].validat ...

  9. ReactPortals传送门

    ReactPortals传送门 React Portals提供了一种将子节点渲染到父组件以外的DOM节点的解决方案,即允许将JSX作为children渲染至DOM的不同部分,最常见用例是子组件需要从视 ...

  10. mol 文件格式简单解析(v2000)

    前言 .mol 文件是常见的化学文件格式,主要包含分子的坐标.分子间的键等数据. 示例文件 下面是一个水分子的 .mol 文件 H2O APtclcactv05052315543D 0 0.00000 ...