luogu#P6270. [湖北省队互测 2014] 十万人的地铁

[湖北省队互测 2014] 十万人的地铁

题目描述

从前有两个人叫陆仁甲和陆仁乙,他们去搭地铁。

陆仁甲要从循礼门出发去广埠屯,而陆仁乙要从广埠屯出发去循礼门。

作为地铁的脑残粉,陆仁甲和陆仁乙很清楚武汉地铁收费的规则。

武汉地铁 22 号线是一条直线,一共 mm 个地铁站,依次编号为 1,,m1,\cdots,m

搭乘地铁需要刷一种叫武汉通的公交卡。进站时刷一次,出站时刷一次,在出站时会根据起始站和终点站之间的距离给武汉通扣费。即,如果设 cost(i,j)cost(i, j) 表示从编号为 ii 的地铁站进,从编号为 jj 的地铁站出的代价,则:

cost(i,j)=ijcost(i,j)=|i-j|

机智的陆仁甲和陆仁乙发现,乘车时的起始站是在进站刷卡时记录在武汉通上面的。而且计费跟乘车时间无关,你可以在 ii 站进站,在地铁上玩一整天后从 jj 站出站,还是付出 cost(i,j)cost(i,j) 的代价。

于是陆仁甲和陆仁乙灵机一动,想出了一个绝妙的免费乘车方案。

首先,陆仁甲从循礼门站进站出发,在中途的螃蟹甲站下车逗留。与此同时,陆仁乙从广埠屯站进站出发,也在中途的螃蟹甲站下车逗留。

接着陆仁甲与陆仁乙在螃蟹甲站会面,交换武汉通。

最后,陆仁甲乘地铁前往广埠屯站,此时陆仁甲的武汉通记录的起始站是广埠屯站,所以扣费 00 元。

陆仁乙乘地铁前往循礼门站,此时陆仁乙的武汉通记录的起始站是循礼门站,所以也扣费 00 元。

这样他们就完成了一次免费乘车。

于是陆仁甲和陆仁乙开始思考:假设有 nn 个人来搭地铁,分别编号为 1,,n1,\cdots,n,第 ii 人从第 sis_i 站出发去第 eie_isieis_i\ne e_i,沿最短路坐地铁。即:

  • si<eis_i<e_i 则依次经过 si,si+1,,ei1,eis_i,s_i+1,\cdots,e_i-1,e_i
  • si>eis_i>e_i 则依次经过 si,si1,,ei+1,eis_i,s_i-1,\cdots,e_i+1,e_i

那么假设他们足够聪明,会在中途下车换票,那么他们乘车的最小总代价是多少?

具体乘车方式说明如下:

  • 一开始,所有人刷卡进站,第 ii 个人在第 sis_i 站。
  • 每次可以进行如下两个操作之一:
  • 0  x  y0\;x\;y:让编号为 xx 的人乘地铁到第 yy 站下车。不允许绕路,即必须往接近 exe_x 的方向乘车。而且不允许从原地出发前往原地,即 yy 不能是第 xx 个人现在所在的地铁站编号。你需要保证 1xn,1ym1\le x\le n,1\le y\le m
  • 1  x  y1\;x\;y:让编号为 xx 的人和编号为 yy 的人交换武汉通。注意此时在同一个地铁站的两人才可以交换车票。你需要保证 1xn,1yn1\le x\le n,1\le y\le n
  • 每次操作时,没有在操作中提到的人会在原地逗留。
  • 所有操作结束后,所有人一起刷卡出站。注意要保证i\boldsymbol i 个人此时在第 ei\boldsymbol{e_i}
  • 最后要使得所有人出站后,武汉通上扣费总和最小。求一个最小的乘车方案。

陆仁甲和陆仁乙当然知道怎么做啦!但是他们想考考你……

输入格式

第一行一个正整数 TT,表示有几组数据。接下来有 TT 个数据,对于每组数据:

第一行两个用空格隔开的正整数 n,mn,m。表示有 nn 个人,mm 个地铁站。

接下来 nn 行每行两个用空格隔开的正整数 si,eis_i,e_i。表示第 ii 个人的起始站和终点站。(siei,1si,eims_i\ne e_i,1\le s_i,e_i\le m

输出格式

对于每组数据,输出一个最优方案。如果有多组都能让扣费总和最小,输出任意一组即可。

第一行有两个用空格隔开的非负整数 ans,sans,s,分别表示最小总代价和操作数。操作数不能太大,要满足 s400000s\le400000

接下来 ss 行每行三个正整数 type  x  ytype\;x\;y 表示一个操作。(type{0,1}type\in\{0,1\}x,yx,y 的限制如前所述)

2
3 7
1 7
1 6
5 1
2 7
1 7
7 1
7 5
0 1 5
1 3 1
0 1 7
0 2 6
0 3 1
0 3
0 1 7
1 2 1
0 2 1

提示

对于所有数据,T6T\le6

编号 n\boldsymbol n m\boldsymbol m
11 =2=2 =1000=1000
22 =100=100 =2=2
33 =4=4 =5=5
44 40\le40 100\le100
565\sim6 100\le100 1000\le1000
787\sim8 2000\le2000 2×104\le2\times10^4
99 6×104\le6\times10^4 105\le10^5
1010 105\le10^5 106\le10^6

(本题纯属 VFleaKing 脑洞……亲测表示进站再出站扣费 1.81.8 元,所以不要尝试模仿题目描述中的行为……)