#ACSPJ2023C. 行走
行走
题目描述
小可可和小多来到了一个网格图上进行最短路训练。
这是一个 的网格图,对于点 ,如果 ,则它向 有一条有 向边,边权为 ;如果 ,则它向 有一条有向边,边权为 。小可 可需要在很短的时间内找到从 到 的最短路。
然而,小多会捣乱 次:小多会删去图中的一条边,然后小可可就需要重新计算 到 的最短路。当小可可计算完成后,小多就会恢复这条边。即:每次小多删 掉的边只会影响到这一次小可可的计算。
小可可坚持尝试不借助外力,自己每次计算出答案。可惜小可可不是机器人,没过一会儿他就晕倒了。于是,计算最短路的任务就落到了你的头上。
输入格式
为避免过大的输入量,网格图边的边权将在程序内生成。
第一行两个正整数 ,表示网格的大小和小多捣乱的次数。
第二行两个整数 和 ,为辅助数据生成的变量。请保证它们为全局变量且 是 64 位无符号整形变量。
接下来按照从第一行到第 行,第一列到第 列的顺序生成 :每次生成时先调用一次 xorshift64(),再将 赋值为 。其中 & 表示二进制按位与运算,xorshift64() 在选手目录下的 xorshift.cpp 中已经给出。 再接下来按照从第一行到第 行,第一列到第 列的顺序生成 :每次生成 时先调用一次xorshift64(),再将 赋值为 。
请严格按照上述过程生成数据,中途不能自行改变 和 的值,否则数据将错误生成。
接下来 行,每行四个整数 ,表示小多捣乱删掉的一条边。保证 或 。
如果你仍不会生成数据,选手目录下的 sample.cpp 已经实现好了所
有的数据读入/生成,你可以直接使用在你的代码中。再次提醒,请不要自行改动 xorshift64() 函数和程序读入/生成数据的顺序。
此数据生成方式仅是为了减少输入量大小,标准算法不依赖于该生成方式。
输出格式
输出 行,每行一个整数,表示删掉给定边后 到 的最短路。
样例 #1
样例输入 #1
4 4
10583998785722269293 2
2 2 2 3
2 3 3 3
1 2 2 2
1 1 1 2
样例输出 #1
5
4
7
9
样例 #2
样例输入 #2
样例输出 #2
提示
数据规模与约定:
- 对于 的数据,满足 ;
- 对于 的数据,满足 ;
- 对于 的数据,满足 ;
- 对于 的数据,有 $2 \le n \le 5000, 1 \le q \le 10^5, 1 \le B \le 30, 1 \le x, y, x′, y′ \le n$。