実行時間制限: 2 sec / メモリ制限: 1024 MB
配点 : 900 点
問題文
N 頂点の、それぞれ M_1, M_2, M_3 辺の単純な無向グラフ X, Y, Z が与えられます。 頂点をそれぞれ x_1, x_2, \dots, x_N, y_1, y_2, \dots, y_N, z_1, z_2, \dots, z_N とします。 X, Y, Z の辺はそれぞれ (x_{a_i}, x_{b_i}), (y_{c_i}, y_{d_i}), (z_{e_i}, z_{f_i}) です。
X, Y, Z を元に N^3 頂点の無向グラフ W を作ります。 X, Y, Z から 1 つずつ頂点を選ぶ方法は N^3 通りありますが、これがそれぞれ W の頂点と一対一に対応します。x_i, y_j, z_k を選ぶことに対応する頂点を (x_i, y_j, z_k) で表すこととします。
W の辺を、以下の手順に沿って張ります。
- X の各辺 (x_u, x_v)、及び全ての w, l について、(x_u, y_w, z_l), (x_v, y_w, z_l) 間に辺を張る
- Y の各辺 (y_u, y_v)、及び全ての w, l について、(x_w, y_u, z_l), (x_w, y_v, z_l) 間に辺を張る
- Z の各辺 (z_u, z_v)、及び全ての w, l について、(x_w, y_l, z_u), (x_w, y_l, z_v) 間に辺を張る
そして、W の頂点 (x_i, y_j, z_k) の重みを 1,000,000,000,000,000,000^{(i +j + k)} = 10^{18(i + j + k)} とします。W の独立集合のうち、頂点の重みの総和の最大値を求めてください。そしてそれを 998,244,353 で割った余りを出力してください。
制約
- 2 \leq N \leq 100,000
- 1 \leq M_1, M_2, M_3 \leq 100,000
- 1 \leq a_i, b_i, c_i, d_i, e_i, f_i \leq N
- X, Y, Z は単純、つまり自己ループや多重辺は存在しない
入力
入力は以下の形式で標準入力から与えられる。
N M_1 a_1 b_1 a_2 b_2 \vdots a_{M_1} b_{M_1} M_2 c_1 d_1 c_2 d_2 \vdots c_{M_2} d_{M_2} M_3 e_1 f_1 e_2 f_2 \vdots e_{M_3} f_{M_3}
出力
重みの総和の最大値を 998,244,353 で割った余りを出力せよ。
入力例 1
2 1 1 2 1 1 2 1 1 2
出力例 1
46494701
(x_2, y_1, z_1), (x_1, y_2, z_1), (x_1, y_1, z_2), (x_2, y_2, z_2) を選ぶ場合が最適です。 答えは 3 \times 10^{72} + 10^{108} を 998,244,353 で割ったあまりの 46,494,701 です。
入力例 2
3 3 1 3 1 2 3 2 2 2 1 2 3 1 2 1
出力例 2
883188316
入力例 3
100000 1 1 2 1 99999 100000 1 1 100000
出力例 3
318525248
Score : 900 points
Problem Statement
Given are simple undirected graphs X, Y, Z, with N vertices each and M_1, M_2, M_3 edges, respectively. The vertices in X, Y, Z are respectively called x_1, x_2, \dots, x_N, y_1, y_2, \dots, y_N, z_1, z_2, \dots, z_N. The edges in X, Y, Z are respectively (x_{a_i}, x_{b_i}), (y_{c_i}, y_{d_i}), (z_{e_i}, z_{f_i}).
Based on X, Y, Z, we will build another undirected graph W with N^3 vertices. There are N^3 ways to choose a vertex from each of the graphs X, Y, Z. Each of these choices corresponds to the vertices in W one-to-one. Let (x_i, y_j, z_k) denote the vertex in W corresponding to the choice of x_i, y_j, z_k.
We will span edges in W as follows:
- For each edge (x_u, x_v) in X and each w, l, span an edge between (x_u, y_w, z_l) and (x_v, y_w, z_l).
- For each edge (y_u, y_v) in Y and each w, l, span an edge between (x_w, y_u, z_l) and (x_w, y_v, z_l).
- For each edge (z_u, z_v) in Z and each w, l, span an edge between (x_w, y_l, z_u) and (x_w, y_l, z_v).
Then, let the weight of the vertex (x_i, y_j, z_k) in W be 1,000,000,000,000,000,000^{(i +j + k)} = 10^{18(i + j + k)}. Find the maximum possible total weight of the vertices in an independent set in W, and print that total weight modulo 998,244,353.
Constraints
- 2 \leq N \leq 100,000
- 1 \leq M_1, M_2, M_3 \leq 100,000
- 1 \leq a_i, b_i, c_i, d_i, e_i, f_i \leq N
- X, Y, and Z are simple, that is, they have no self-loops and no multiple edges.
Input
Input is given from Standard Input in the following format:
N M_1 a_1 b_1 a_2 b_2 \vdots a_{M_1} b_{M_1} M_2 c_1 d_1 c_2 d_2 \vdots c_{M_2} d_{M_2} M_3 e_1 f_1 e_2 f_2 \vdots e_{M_3} f_{M_3}
Output
Print the maximum possible total weight of an independent set in W, modulo 998,244,353.
Sample Input 1
2 1 1 2 1 1 2 1 1 2
Sample Output 1
46494701
The maximum possible total weight of an independent set is that of the set (x_2, y_1, z_1), (x_1, y_2, z_1), (x_1, y_1, z_2), (x_2, y_2, z_2). The output should be (3 \times 10^{72} + 10^{108}) modulo 998,244,353, which is 46,494,701.
Sample Input 2
3 3 1 3 1 2 3 2 2 2 1 2 3 1 2 1
Sample Output 2
883188316
Sample Input 3
100000 1 1 2 1 99999 100000 1 1 100000
Sample Output 3
318525248