atcoder#ARC111C. [ARC111C] Too Heavy

[ARC111C] Too Heavy

题目描述

1 1 から N N の番号がついた N N 人の人間と、同じく 1 1 から N N の番号がついた N N 個の荷物があります。 人 i i の体重は ai a_i , 荷物 j j の重さは bj b_j です。 はじめ人 i i は 荷物 pi p_i を持っており、以下の操作を 0 0 回以上繰り返すことで全ての人が自分と同じ番号の荷物を持っている状態にしたいです。

  • i,j (i  j) i,j\ (i\ \neq\ j) を選び、人 i i と人 j j の荷物を交換する。

ただし、人は自分の体重以上の重さの荷物を持つと疲れてしまい、その後一切操作には加われません (すなわち、i,j i,j として選べません)。 特に、 ai  bpi a_i\ \leq\ b_{p_i} なら一度も操作に加われません。

条件を満たす操作列があるか判定し、存在するならばそのうち操作回数が最小であるものをひとつ構成してください。

输入格式

入力は以下の形式で標準入力から与えられる。

N N a1 a_1 a2 a_2 \ldots aN a_N b1 b_1 b2 b_2 \ldots bN b_N p1 p_1 p2 p_2 \ldots pN p_N

输出格式

どのように操作しても条件を満たせない場合、-1 を出力せよ。 条件を満たすことが可能な場合、以下のフォーマットで操作列を出力せよ。

K K i1 i_1 j1 j_1 i2 i_2 j2 j_2 : : iK i_K jK j_K

ここで K K は操作回数であり、 it,jt i_t,j_t t t 回目の操作で選んだ人間の番号である。

解が複数存在する場合、どれを出力しても構わない。

题目大意

NN 个人和行李,编号从 11NN。第 ii 个人的重量是 aia_i,第 jj 个行李的重量是 bjb_j

最初,第 ii 个人有行李 pip _ i,我们希望进行以下操作,以便第 ii 个人将有行李 i(1iN)i (1 \le i \le N)

选择 i,j(1ijN)i,j(1 \le i \le j \le N),交换第 ii 个人和第 jj 个人的行李。

当操作过程中,第 ii 个人的重量 \leii 个行李的重量即 aibpia_i \le b_{p _ i} 时,这个人就不能参加任何操作。

确定是否存在实现目标的操作序列,如果是,用尽可能少的操作数量构造一个这样的序列。如果不行,输出 1-1

4
3 4 8 6
5 3 1 3
3 4 2 1
3
3 4
1 3
4 2
4
1 2 3 4
4 3 2 1
4 3 2 1
-1
1
58
998244353
1
0

提示

制約

  • 1  N  200000 1\ \leq\ N\ \leq\ 200000
  • 1  ai,bi  109 1\ \leq\ a_i,b_i\ \leq\ 10^9
  • p p 1,  ,N 1,\ \ldots\ ,N の順列
  • 入力される数はすべて整数

Sample Explanation 1

初期状態で人 1,2,3,4 1,2,3,4 が持っている荷物の重さはそれぞれ 1,3,3,5 1,3,3,5 なので、初期状態では誰も疲れていません。 まず人 3 3 4 4 で操作をします。人 1,2,3,4 1,2,3,4 が持っている荷物の重さはそれぞれ 1,3,5,3 1,3,5,3 なので、まだ誰も疲れていません。 次に人 1 1 3 3 で操作をします。人 1,2,3,4 1,2,3,4 が持っている荷物の重さはそれぞれ 5,3,1,3 5,3,1,3 なので、人 1 1 が疲れます。 最後に人 4 4 2 2 で操作をします。人 1,2,3,4 1,2,3,4 が持っている荷物の重さはそれぞれ 5,3,1,3 5,3,1,3 なので、これで新たに疲れる人はいません。 これによって全員が正しい荷物を持っている状態になり、さらにこれは最小の操作回数なので、正しい出力の一つです。

Sample Explanation 2

条件を満たすように操作することは出来ません。

Sample Explanation 3

初期状態で条件を満たしています。