#P12741. [POI 2016 R3] 等价程序 Equivalent programs

[POI 2016 R3] 等价程序 Equivalent programs

题目背景

翻译来自于 LibreOJ

题目描述

题目译自 XXIII Olimpiada Informatyczna — III etap Równoważne programy

Byteasar 最近入手了一台新电脑,正热衷于学习编程。程序是由一系列指令组成的序列,指令共有 kk 种,为方便起见,编号为 11kk。某些指令对具有交换性,即如果它们在程序中相邻(无论顺序),交换它们的位置会得到一个行为相同的等价程序。其余不具备此性质的指令对则称为互斥指令对。Byteasar 已经编写了两个包含 nn 个指令的程序,他很好奇这两个程序是否等价。请帮助他解答!

输入格式

第一行包含三个整数 n,k,mn, k, m,分别表示两个程序的指令数量、指令种类数和互斥指令对的数量。

接下来的 mm 行描述互斥指令对,每行包含两个整数 ai,bia_i, b_i (1ai<bik)(1 \leq a_i < b_i \leq k),表示指令 aia_ibib_i 构成互斥对。保证每对指令至多出现一次。

最后两行描述两个程序,每行包含 nn 个整数 c1,c2,,cnc_1, c_2, \ldots, c_n (1cik)(1 \leq c_i \leq k),表示程序中指令的编号序列指令的编号。

输出格式

输出一行,包含一个单词:若输入的两个程序等价,输出 TAK;否则输出 NIE

5 3 1
2 3
1 1 2 1 3
1 2 3 1 1
TAK
3 3 1
2 3
1 2 3
3 2 1
NIE

提示

样例 1 解释

通过以下交换序列将第一个程序转换为第二个程序:(2,3),(4,5),(3,4)(2,3), (4,5), (3,4),其中 (i,i+1)(i, i+1) 表示交换当前序列中第 ii 和第 i+1)i+1) 条指令。

附加样例

  1. n=50,k=50,m=1n=50, k=50, m=1,程序为 (1,2,,49,50)(1,2, \ldots, 49,50)(50,49,,2,1)(50,49, \ldots, 2,1),答案为 NIE
  2. n=99999,k=3,m=1n=99999, k=3, m=1,互斥指令为 1122,程序为 (1,2,3,1,2,3,)(1,2,3,1,2,3, \ldots)(3,1,2,3,1,2,)(3,1,2,3,1,2, \ldots),答案为 TAK
  3. n=100000,k=1000,m=50000n=100000, k=1000, m=50000,程序为 (13,13,,13)(13,13, \ldots,13)(37,37,,37)(37,37, \ldots,37),答案为 NIE

所有测试数据满足 $1 \leq n \leq 100000, 1 \leq k \leq 1000, 0 \leq m \leq 50000$。

详细子任务附加限制及分值如下表所示。

子任务 附加限制 分值
11 n5n \leq 5 55
22 k2k \leq 2
33 n1000n \leq 1000 2525
44 无附加限制 6565