A - CUBRID HA Load Balance

実行時間制限: 2 sec / メモリ制限: 1024 MiB

表示言語

/ /

Score : 100 points

Problem Statement

A CUBRID HA cluster is a system consisting of N servers. The servers are numbered from 1 to N.

Jank has become the server administrator of SCSC and wants to choose some of the servers in the CUBRID HA cluster to use. Jank turns on the servers he chooses and turns off the servers he does not choose.

Jank, who rules SCSC, chooses whether each chosen server operates as a Master or as a Slave when turning it on. A Master server can process RW requests and RO requests, and a Slave server can process RO requests and SO requests. Each server can process at most one request at the same time.

If there is no Master server among the currently turned-on servers and at least one Slave server is currently turned on, the currently turned-on Slave server with the smallest number immediately becomes a Master server.

Jank, who rules SCSC, must process Q queries of the following two types in order.

  • 1 i: Turn off server i. If it is already turned off, ignore this query.
  • 2 a b c: a RW requests, b RO requests, and c SO requests arrive simultaneously.

The requests that arrive in a type-2 query must all be processed using only the servers that are currently turned on. Each request must be assigned to a server that can process that request, and at most one request can be assigned to each server. A request that is not assigned when the query is given cannot be processed.

When all requests have been assigned, each server processes its assigned request and discards the processed request. A server with no remaining request becomes ready to process another request again.

Find the minimum number of servers Jank, who rules SCSC, must choose initially in order to process all requests. If it is impossible to process all requests by any method, output -1 instead.

Constraints

  • 1 \leq N,Q \leq 2\,000
  • 1 \leq i \leq N
  • 0 \leq a,b,c \leq N
  • There is at least one query of the second type.
  • All input values are integers.

Input

The input is given from Standard Input in the following format:

N Q
\mathrm{query}_1
\mathrm{query}_2
\vdots
\mathrm{query}_Q

Each query is in one of the following two formats:

1 i
2 a b c

Output

Output the minimum number of servers Jank, who rules SCSC, must choose initially in order to process all requests. If it is impossible to process all requests by any method, output -1 instead.


Sample Input 1

3 4
2 2 0 0
1 1
2 0 0 1
2 1 0 1

Sample Output 1

3

表示言語

/ /

Score : 100 points

문제

CUBRID HA 클러스터는 N개의 서버로 구성된 시스템이다. 서버는 1번부터 N번까지 번호가 붙어 있다.

SCSC의 서버 관리자로 취임한 Jank는 CUBRID HA 클러스터의 서버 중 몇 대를 선택해 사용하려고 한다. Jank는 선택한 서버를 켜고 선택하지 않은 서버를 끈다.

SCSC를 지배하는 Jank는 선택한 각 서버를 켤 때 Master 또는 Slave 중 하나를 선택해 작동시킨다. Master 서버는 RW 요청과 RO 요청을 처리할 수 있고, Slave 서버는 RO 요청과 SO 요청을 처리할 수 있다. 각 서버는 최대 한 개의 요청만 동시에 처리할 수 있다.

만약 현재 켜져 있는 서버 중 Master 서버가 하나도 없고 현재 켜져 있는 Slave 서버가 하나 이상 있다면, 그중 번호가 가장 작은 서버가 즉시 Master 서버가 된다.

SCSC를 지배하는 Jank는 아래 두 종류의 쿼리 Q개를 순서대로 처리해야 한다.

  • 1 i: i번 서버를 끈다. 이미 꺼져 있는 서버라면 무시한다.
  • 2 a b c: RW 요청 a개, RO 요청 b개, SO 요청 c개가 동시에 들어온다.

2번 쿼리로 들어온 요청은 현재 켜져 있는 서버만 사용해 모두 처리해야 한다. 각 요청은 요청을 처리할 수 있는 서버에 배정되어야 하며, 하나의 서버에는 최대 한 개의 요청만 배정할 수 있다. 쿼리가 주어질 때 배정하지 못한 요청은 처리할 수 없다.

모든 요청이 배정되면 각 서버는 요청을 처리하고 처리한 요청을 버린다. 남은 요청이 없는 서버는 다시 다른 요청을 처리할 수 있는 상태가 된다.

SCSC를 지배하는 Jank가 모든 요청을 처리할 수 있도록 처음에 선택해야 하는 서버 수의 최솟값을 구하여라. 어떤 방법으로도 모든 요청을 처리할 수 없다면 대신 -1을 출력한다.

제한

  • 1 \leq N,Q \leq 2\,000
  • 1 \leq i \leq N
  • 0 \leq a,b,c \leq N
  • 2번 쿼리가 하나 이상 주어진다.
  • 입력으로 주어지는 수는 모두 정수이다.

입력

입력은 다음 형식으로 표준 입력으로 주어진다.

N Q
\mathrm{query}_1
\mathrm{query}_2
\vdots
\mathrm{query}_Q

각 쿼리는 다음 두 형식 중 하나이다.

1 i
2 a b c

출력

SCSC를 지배하는 Jank가 모든 요청을 처리할 수 있도록 처음에 선택해야 하는 서버 수의 최솟값을 출력한다. 어떤 방법으로도 모든 요청을 처리할 수 없다면 대신 -1을 출력한다.


입력 예 1

3 4
2 2 0 0
1 1
2 0 0 1
2 1 0 1

출력 예 1

3

表示言語

/ /

配点 : 100 点

問題文

CUBRID HA クラスタは N 台のサーバからなるシステムです.サーバには 1 番から N 番までの番号が付いています.

SCSC のサーバ管理者に就任した Jank は,CUBRID HA クラスタのサーバのうちいくつかを選んで使おうとしています.Jank は選んだサーバを起動し,選ばないサーバを停止します.

SCSC を支配する Jank は,選んだ各サーバを起動するとき,Master または Slave のどちらとして動作させるかを選びます.Master サーバは RW リクエストと RO リクエストを処理でき,Slave サーバは RO リクエストと SO リクエストを処理できます.各サーバは同時に高々 1 個のリクエストしか処理できません.

現在起動しているサーバの中に Master サーバが 1 台も存在せず,現在起動している Slave サーバが 1 台以上存在する場合,現在起動している Slave サーバのうち番号が最も小さいサーバがただちに Master サーバになります.

SCSC を支配する Jank は,以下の 2 種類のクエリを Q 個,順に処理しなければなりません.

  • 1 i: サーバ i を停止する.すでに停止しているサーバなら無視する.
  • 2 a b c: RW リクエスト a 個,RO リクエスト b 個,SO リクエスト c 個が同時に到着する.

2 番目の形式のクエリで到着したリクエストは,現在起動しているサーバだけを使ってすべて処理しなければなりません.各リクエストは,そのリクエストを処理できるサーバに割り当てる必要があり,1 台のサーバには高々 1 個のリクエストしか割り当てられません.クエリが与えられた時点で割り当てられなかったリクエストは処理できません.

すべてのリクエストが割り当てられると,各サーバはリクエストを処理し,処理したリクエストを破棄します.残っているリクエストがないサーバは,再び他のリクエストを処理できる状態になります.

SCSC を支配する Jank がすべてのリクエストを処理するためには,最初に選ぶ必要があるサーバの最小個数を求めてください.どのような方法でもすべてのリクエストを処理できない場合は,代わりに -1 を出力してください.

制約

  • 1 \leq N,Q \leq 2\,000
  • 1 \leq i \leq N
  • 0 \leq a,b,c \leq N
  • 2 番目の形式のクエリが少なくとも 1 個与えられる
  • 入力される数値はすべて整数

入力

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

N Q
\mathrm{query}_1
\mathrm{query}_2
\vdots
\mathrm{query}_Q

各クエリは以下の 2 種類のいずれかの形式で与えられる.

1 i
2 a b c

出力

SCSC を支配する Jank がすべてのリクエストを処理するために最初に選ぶ必要があるサーバの最小個数を出力せよ.どのような方法でもすべてのリクエストを処理できない場合は,代わりに -1 を出力せよ.


入力例 1

3 4
2 2 0 0
1 1
2 0 0 1
2 1 0 1

出力例 1

3
B - Sushisushi Ruins

実行時間制限: 2 sec / メモリ制限: 1024 MiB

表示言語

/ /

Score : 100 points

Problem Statement

Archaeologist seokgukim is studying an inscription discovered at the Sushisushi ruins.

The stone tablet currently being studied has a string S of length N engraved on it, and scholars believe that a string T of length M appears in the inscription.

Over a long period of time, some part of the originally engraved text is said to have disappeared entirely. You want to restore the string using the following method.

  1. Delete a substring of length K from T. (1 \leq K < M)

  2. If the string after deletion appears as a substring of S, this is called a valid restoration method.

Find the number of distinct valid restoration methods. Two valid restoration methods are considered different if at least one of the following differs: the length of the deleted substring, the position of the deleted substring, or the position where the string after deletion appears as a substring of S.

Constraints

  • 1 \leq N, M \leq 200\,000
  • Both S and T consist only of lowercase English letters.
  • All given numbers are integers.

Input

The input is given from Standard Input in the following format:

N M
S
T

Output

Output the number of distinct valid restoration methods.


Sample Input 1

4 4
scsc
scpc

Sample Output 1

8

表示言語

/ /

Score : 100 points

문제

고고학자 김석구는 스시스시 유적에서 발견된 비문을 연구하고 있다.

현재 연구하고 있는 유적의 석판에는 길이 N인 문자열 S가 새겨져 있으며, 학자들은 길이 M인 문자열 T가 비문 속에 나타나 있다고 추정하고 있다.

오랜 시간에 걸쳐 비문이 훼손되면서 원래 새겨져 있던 문구의 일부는 통째로 사라졌다고 한다. 여러분은 다음과 같은 방법으로 문자열을 복원하려고 한다.

  1. T에서 길이가 K인 부분문자열을 지운다. (1 \leq K < M)

  2. 지운 뒤의 문자열이 S의 부분문자열로 나타나면 유효한 복원 방법이라고 한다.

서로 다른 유효한 복원 방법의 개수를 구해 보자. 지운 부분문자열의 길이, 지운 위치, S의 부분문자열로 나타난 위치 중 하나라도 다르면 다른 복원 방법이다.

제한

  • 1 \leq N, M \leq 200\,000
  • S와 T는 모두 알파벳 소문자로만 이루어져 있다.
  • 입력으로 주어지는 수는 모두 정수이다.

입력

입력은 다음 형식으로 표준 입력으로 주어진다.

N M
S
T

출력

서로 다른 유효한 복원 방법의 개수를 출력한다.


입력 예 1

4 4
scsc
scpc

출력 예 1

8

表示言語

/ /

配点 : 100 点

問題文

考古学者のキム•ソックは,スシスシ遺跡で発見された碑文を研究している.

現在研究している遺跡の石板には長さ N の文字列 S が刻まれており,学者たちは長さ M の文字列 T が碑文の中に現れていると推定している.

長い時間が経つうちに,もともと刻まれていた文句の一部はまるごと消えてしまったという.あなたは次の方法で文字列を復元しようとしている.

  1. T から長さ K の部分文字列を削除する.(1 \leq K < M)

  2. 削除後の文字列が S の部分文字列として現れるなら,有効な復元方法であるという.

互いに異なる有効な復元方法の個数を求めよ.削除した部分文字列の長さ,削除した位置,削除後の文字列が S の部分文字列として現れる位置のうち,少なくとも 1 つが異なれば異なる復元方法である.

制約

  • 1 \leq N, M \leq 200\,000
  • S と T はどちらも英小文字のみからなる
  • 入力される数値はすべて整数

入力

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

N M
S
T

出力

互いに異なる有効な復元方法の個数を出力せよ.


入力例 1

4 4
scsc
scpc

出力例 1

8
C - SCSC Magical Garden

実行時間制限: 2 sec / メモリ制限: 1024 MiB

表示言語

/ /

Score : 100 points

Problem Statement

Haru_101 prepared an N \times N grid-shaped garden for SCSC. Every spring, SCSC members have a beautiful tradition of planting one flower in each cell. This year, they decided to plant sunflowers and clovers.

After all flowers were planted, Terra and Lulu looked around the garden and gave different impressions.

Terra looked down at the whole garden from a high place and said: "Looking at the whole garden, there are more cells planted with blue clovers than yellow sunflowers!"

Lulu likes taking photos, so Lulu walked around the garden and took photos of size 3 \times 3. After taking photos of every 3 \times 3 area in the garden without omission, Lulu looked at the photos and said: "Huh? In every photo I took, there are more sunflowers than clovers!"

Can you make a magical garden where, as Terra said, the whole garden has more clovers, but every photo Lulu took has more sunflowers?

Constraints

  • 1 \leq T \leq 1\,000
  • For each test case, 3 \leq N \leq 1\,000.
  • All given numbers are integers.
  • Only cases where the output does not exceed 2 MiB are given.

Input

The input is given from Standard Input in the following format:

T
\mathrm{case}_1
\mathrm{case}_2
\vdots
\mathrm{case}_T

Each test case is given in the following format:

N

Output

For each test case, output the answer in the following format.

If it is possible to make a magical garden, output YES on the first line.

Then output N lines, each containing a string of length N representing the state of the garden. Each string must consist only of S and C. The j-th character of the i-th string must be S if the flower planted in cell (i,j) of the garden is a sunflower, and C if it is a clover. In every 3 \times 3 subgrid of the grid, the number of S must be greater than the number of C, and in the whole grid, the number of C must be greater than the number of S.

If there are multiple magical gardens, output any one of them.

If it is impossible to make a magical garden, output NO on a single line instead.


Sample Input 1

1
3

Sample Output 1

NO

Sample Input 2

1
4

Sample Output 2

YES
CCSC
CSSC
CSSC
CCSC

表示言語

/ /

Score : 100 points

문제

Haru_101은 SCSC에 N \times N 크기의 격자 모양 화원을 마련했다. SCSC 회원들은 매년 봄마다 각 칸에 꽃을 하나씩 심는 아름다운 전통이 있다. 올해는 해바라기와 클로버를 심기로 했다.

모든 꽃을 심고 난 뒤 화원을 구경하던 테라와 루루는 서로 다른 감상을 남겼다.

테라는 높은 곳에서 화원 전체를 한눈에 내려다보며 감상하며 말했다. "전체적으로 보니 노란 해바라기보다는 푸른 클로버가 심어진 칸이 더 많네!"

루루는 사진 찍는 것을 좋아하기 때문에 화원 구석구석을 돌아다니며 3 \times 3 크기의 사진을 촬영했다. 루루는 화원에 존재하는 모든 3 \times 3 영역을 빠짐없이 촬영한 뒤 찍은 사진을 보며 말했다. "어? 내가 찍은 어떤 사진을 봐도 그 안에는 해바라기가 클로버보다 많은데?"

테라의 말대로 화원 전체에는 클로버가 더 많지만 루루가 찍은 어떤 사진을 보더라도 해바라기가 더 많은 마법 같은 화원을 만들 수 있을까?

제한

  • 1 \leq T \leq 1\,000
  • 3 \leq N \leq 1\,000
  • 입력으로 주어지는 수는 모두 정수이다.
  • 출력이 2 MiB를 넘지 않는 경우만 주어진다.

입력

입력은 다음 형식으로 표준 입력으로 주어진다.

T
\mathrm{case}_1
\mathrm{case}_2
\vdots
\mathrm{case}_T

각 테스트 케이스는 다음 형식으로 주어진다.

N

출력

각 테스트 케이스마다 다음 형식으로 답을 출력한다.

마법 같은 화원을 만들 수 있다면 첫째 줄에 YES를 출력한다.

둘째 줄부터 N개의 줄에 걸쳐 S와 C로만 이루어진 길이 N의 문자열을 출력한다. 그중 i번째 문자열의 j번째 문자는 화원의 i 행 j 열에 심어진 꽃이 해바라기라면 S, 클로버라면 C여야 한다. 이때 격자의 모든 3 \times 3 부분격자에 있는 S의 개수가 C의 개수보다 많아야 하며, 전체 격자에 있는 C의 개수가 S의 개수보다 많아야 한다.

마법 같은 화원이 여러 가지 존재한다면 그중 아무거나 출력해도 된다.

마법 같은 화원을 만드는 것이 불가능하다면 대신 NO를 출력한다.


입력 예 1

1
3

출력 예 1

NO

입력 예 2

1
4

출력 예 2

YES
CCSC
CSSC
CSSC
CCSC

表示言語

/ /

配点 : 100 点

問題文

Haru_101 は SCSC に N \times N の格子状の花園を用意した.SCSC の会員たちには,毎年春に各マスへ花を 1 つずつ植える美しい伝統がある.今年はヒマワリとクローバーを植えることにした.

すべての花を植えた後,花園を見物していたテラとルルは互いに異なる感想を残した.

テラは高いところから花園全体を一目で見下ろしながら言った.「全体的に見ると,黄色いヒマワリより青いクローバーが植えられたマスの方が多いね!」

ルルは写真を撮るのが好きなので,花園の隅々を歩き回りながら 3 \times 3 の写真を撮影した.ルルは花園に存在するすべての 3 \times 3 領域を漏れなく撮影した後,撮った写真を見ながら言った.「あれ?私が撮ったどの写真を見ても,その中にはヒマワリの方がクローバーより多いよ?」

テラの言葉通り花園全体にはクローバーの方が多いが,ルルが撮ったどの写真を見てもヒマワリの方が多い,魔法のような花園を作ることはできるだろうか?

制約

  • 1 \leq T \leq 1\,000
  • 各テストケースにおいて,3 \leq N \leq 1\,000
  • 入力される数値はすべて整数である.
  • 出力が 2 MiB を超えない場合のみ与えられる.

入力

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

T
\mathrm{case}_1
\mathrm{case}_2
\vdots
\mathrm{case}_T

各テストケースは次の形式で与えられる.

N

出力

各テストケースについて,次の形式で答えを出力せよ.

魔法のような花園を作れるなら,最初の行に YES を出力する.

続いて N 行にわたり,花園の状態を表す長さ N の文字列を出力する.各文字列は S と C のみからならなければならず,i 番目の文字列の j 番目の文字は,花園のマス (i,j) に植えられた花がヒマワリなら S,クローバーなら C を出力しなければならない.このとき,格子のすべての 3 \times 3 部分格子で S の個数は C の個数より多くなければならず,格子全体で C の個数は S の個数より多くなければならない.

魔法のような花園が複数存在するなら,そのうちどれを出力してもよい.

魔法のような花園を作ることが不可能なら,代わりに NO を 1 行に出力する.


入力例 1

1
3

出力例 1

NO

入力例 2

1
4

出力例 2

YES
CCSC
CSSC
CSSC
CCSC
D - Mobilint Tensor Scheduling (ARIES)

実行時間制限: 2 sec / メモリ制限: 1024 MiB

表示言語

/ /

Score : 100 points

Problem Statement

Zye is writing AI inference code to run on ARIES using Mobilint's SDK. Since Zye is a developer who is not very good at coding, the code he writes can compute only tree-shaped graphs.

Using this code, Zye wants to compute a rooted tree-shaped computation graph consisting of N tensors. The root of the tree is node 1. Node i of the tree represents a tensor of size w_i MiB.

A tensor represented by a leaf node is called an input tensor, and a tensor represented by a non-leaf node is called a result tensor. Input tensors already exist in memory in the initial state. The memory usage in the initial state is at most M MiB.

To compute the result tensor represented by node i, all tensors represented by the children of i must currently exist in memory. When computing the result tensor represented by node i, first the result tensor of size w_i MiB is allocated in memory. After the computation is finished, all tensors represented by the children of i are removed from memory.

The memory usage at a certain moment is defined as the sum of the sizes of all tensors that exist in memory at that moment.

Zye wants to choose the computation order so that the peak memory usage while computing the tensor represented by the root node is minimized. The peak memory usage is the maximum memory usage over the initial state and all moments during the computation.

The memory limit of the computer is M MiB. During the computation, the memory usage must always be at most M MiB.

Find the minimum peak memory usage needed to compute the result tensor represented by the root node.

Constraints

  • 2 \leq N \leq 200\,000
  • M = 16\,384
  • 1 \leq w_i \leq M
  • 1 \leq p_i \leq N
  • The given graph is a rooted tree with root node 1.
  • All input values are integers.

Input

The input is given from Standard Input in the following format:

N M
w_1 w_2 \dots w_N
p_2 p_3 \dots p_N

Here, p_i denotes the parent of node i.

Output

If it is possible to compute the result tensor represented by the root node so that the peak memory usage is at most M MiB, output the minimum possible peak memory usage.

Otherwise, output OOM instead.


Sample Input 1

8 16384
6 4 5 3 2 4 3 1
1 1 2 2 4 3 3

Sample Output 1

15

In the initial state, the tensors that exist in memory are the input tensors represented by leaf nodes 5,6,7,8. Therefore, the memory usage is 2+4+3+1=10 MiB.

For example, the result tensors can be computed in the following order.

  1. Compute the result tensor represented by node 4. The maximum memory usage during this step is 10+3=13 MiB.
  2. Compute the result tensor represented by node 3. The maximum memory usage during this step is 9+5=14 MiB.
  3. Compute the result tensor represented by node 2. The maximum memory usage during this step is 10+4=14 MiB.
  4. Compute the result tensor represented by node 1. The maximum memory usage during this step is 9+6=15 MiB.

The peak memory usage for this computation order is 15 MiB. It is impossible to make the peak memory usage at most 14 MiB, so the answer is 15.

表示言語

/ /

Score : 100 points

문제

자이는 모빌린트의 SDK를 사용하여 ARIES에서 실행할 AI 추론 코드를 작성하려고 한다. 자이는 코딩을 잘 하지 못하는 개발자이기 때문에 자이가 작성한 코드로는 트리 모양의 그래프만 계산할 수 있다.

자이는 이 코드로 텐서 N개로 이루어진 루트가 있는 트리 모양의 계산 그래프를 계산하려고 한다. 트리의 루트는 1번 노드이다. 트리의 i번 노드는 크기가 w_i MiB인 텐서를 가리킨다.

리프 노드가 가리키는 텐서를 입력 텐서, 리프가 아닌 노드가 가리키는 텐서를 결과 텐서라고 하자. 입력 텐서는 초기 상태에서 이미 메모리에 존재한다. 초기 상태의 메모리 사용량은 M MiB 이하이다.

i번 노드가 가리키는 결과 텐서를 계산하려면 i의 모든 자식 노드가 가리키는 텐서가 현재 메모리에 있어야 한다. i번 노드가 가리키는 결과 텐서를 계산할 때는 먼저 크기가 w_i MiB인 결과 텐서를 메모리에 할당하고, 계산이 끝나면 i의 모든 자식 노드가 가리키는 텐서를 메모리에서 제거한다.

어떤 시점의 메모리 사용량은 그 시점에 메모리에 존재하는 모든 텐서 크기의 합이다.

자이는 계산 순서를 적절히 조정해 루트 노드가 가리키는 텐서를 계산할 때의 피크 메모리 사용량을 최소화하려고 한다. 피크 메모리 사용량은 초기 상태와 모든 계산 과정에서의 메모리 사용량의 최댓값이다.

사용할 컴퓨터의 메모리 한도는 M MiB이다. 계산 과정에서 메모리 사용량은 항상 M MiB 이하여야 한다.

루트 노드가 가리키는 결과 텐서를 계산하는 데 필요한 피크 메모리 사용량의 최솟값을 구해 보자.

제한

  • 2 \leq N \leq 200\,000
  • M = 16\,384
  • 1 \leq w_i \leq M
  • 1 \leq p_i \leq N
  • 주어지는 그래프는 루트가 1번인 트리이다.
  • 입력으로 주어지는 수는 모두 정수이다.

입력

입력은 다음 형식으로 표준 입력으로 주어진다.

N M
w_1 w_2 \dots w_N
p_2 p_3 \dots p_N

p_i는 i번 노드의 부모이다.

출력

피크 메모리 사용량이 M MiB 이하가 되도록 루트 노드가 가리키는 결과 텐서를 계산할 수 있다면 가능한 피크 메모리 사용량의 최솟값을 출력한다.

그렇지 않다면 대신 OOM을 출력한다.


입력 예 1

8 16384
6 4 5 3 2 4 3 1
1 1 2 2 4 3 3

출력 예 1

15

초기 상태에서 메모리에 존재하는 텐서는 5번, 6번, 7번, 8번 리프 노드가 가리키는 입력 텐서이다. 이때 메모리 사용량은 2+4+3+1=10 MiB이다.

예를 들어 다음 순서로 결과 텐서를 계산할 수 있다.

  1. 4번 노드가 가리키는 결과 텐서를 계산한다. 메모리 사용량의 최댓값은 10+3=13 MiB가 된다.
  2. 3번 노드가 가리키는 결과 텐서를 계산한다. 메모리 사용량의 최댓값은 9+5=14 MiB가 된다.
  3. 2번 노드가 가리키는 결과 텐서를 계산한다. 메모리 사용량의 최댓값은 10+4=14 MiB가 된다.
  4. 1번 노드가 가리키는 결과 텐서를 계산한다. 메모리 사용량의 최댓값은 9+6=15 MiB가 된다.

이 순서에서 피크 메모리 사용량은 15 MiB이다. 피크 메모리 사용량을 14 MiB 이하로 만드는 것은 불가능하므로 정답은 15이다.

表示言語

/ /

配点 : 100 点

問題文

ザイは Mobilint の SDK を用いて,ARIES 上で実行する AI 推論コードを書こうとしています.ザイはコーディングがあまり得意でない開発者なので,ザイが書いたコードでは木状のグラフしか計算できません.

ザイはこのコードで,N 個のテンソルからなる根付き木状の計算グラフを計算します.木の根は頂点 1 です.木の頂点 i は,サイズが w_i MiB であるテンソルを表します.

葉が表すテンソルを入力テンソル,葉でない頂点が表すテンソルを結果テンソルと呼びます.入力テンソルは初期状態ですでにメモリ上に存在します.初期状態でのメモリ使用量は M MiB 以下です.

頂点 i が表す結果テンソルを計算するためには,i のすべての子が表すテンソルが現在メモリ上に存在している必要があります.頂点 i が表す結果テンソルを計算するときは,まずサイズ w_i MiB の結果テンソルをメモリ上に確保します.その計算が完了した直後に,i のすべての子が表すテンソルをメモリから削除します.

ある時点でのメモリ使用量を,その時点でメモリ上に存在するすべてのテンソルのサイズの総和と定義します.

ザイは計算順序を適切に選ぶことで,根が表すテンソルを計算するときのピークメモリ使用量を最小化したいです.ピークメモリ使用量とは,初期状態および計算過程のすべての時点におけるメモリ使用量の最大値です.

使用するコンピュータのメモリ上限は M MiB です.計算中のどの時点においても,メモリ使用量は M MiB 以下でなければなりません.

根が表す結果テンソルを計算するために必要なピークメモリ使用量の最小値を求めてください.

制約

  • 2 \leq N \leq 200\,000
  • M = 16\,384
  • 1 \leq w_i \leq M
  • 1 \leq p_i \leq N
  • 与えられるグラフは頂点 1 を根とする根付き木である.
  • 入力される数値はすべて整数

入力

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

N M
w_1 w_2 \dots w_N
p_2 p_3 \dots p_N

ここで,p_i は頂点 i の親を表す.

出力

ピークメモリ使用量が M MiB 以下となるように根が表す結果テンソルを計算できるならば,可能なピークメモリ使用量の最小値を出力する.

そうでなければ,代わりに OOM を出力する.


入力例 1

8 16384
6 4 5 3 2 4 3 1
1 1 2 2 4 3 3

出力例 1

15

初期状態では,メモリ上に存在するテンソルは,葉である頂点 5,6,7,8 が表す入力テンソルです.したがって,このときのメモリ使用量は 2+4+3+1=10 MiB です.

例えば,次の順序で結果テンソルを計算できます.

  1. 頂点 4 が表す結果テンソルを計算する.このステップ中のメモリ使用量の最大値は 10+3=13 MiB である.
  2. 頂点 3 が表す結果テンソルを計算する.このステップ中のメモリ使用量の最大値は 9+5=14 MiB である.
  3. 頂点 2 が表す結果テンソルを計算する.このステップ中のメモリ使用量の最大値は 10+4=14 MiB である.
  4. 頂点 1 が表す結果テンソルを計算する.このステップ中のメモリ使用量の最大値は 9+6=15 MiB である.

この計算順序におけるピークメモリ使用量は 15 MiB です.ピークメモリ使用量を 14 MiB 以下にすることはできないため,答えは 15 です.

E - I Wanna be The Prism

実行時間制限: 1 sec / メモリ制限: 1024 MiB

表示言語

/ /

Score : 100 points

Problem Statement

You are given N points in three-dimensional space. The coordinates of the i-th point are (x_i, y_i, z_i).

A sungjae0506 is a triangular prism that contains all the given points on its boundary or in its interior, has bases perpendicular to the z-axis, and has lateral faces perpendicular to the xy-plane.

Among all possible sungjae0506s, find the volume of the sungjae0506 that minimizes \frac{\text{volume}}{\text{surface area}}.

Constraints

  • 3 \leq N \leq 100\,000
  • -10^8 \leq x_i, y_i, z_i \leq 10^8
  • All input values are integers.
  • Let D be the distance between the farthest pair among the given N points. Only cases are given in which, even if each given point is moved to an arbitrary position within distance 10^{-6}D from its original position, the sungjae0506 minimizing \frac{\text{volume}}{\text{surface area}} exists uniquely.

Input

The input is given from Standard Input in the following format:

N
x_1 y_1 z_1
x_2 y_2 z_2
\vdots
x_N y_N z_N

Output

Print the volume of the sungjae0506 that minimizes \frac{\text{volume}}{\text{surface area}} among all possible sungjae0506s. An absolute or relative error of at most 10^{-9} is accepted.


Sample Input 1

6
88 848 44
-159 810 8
45 522 -21
163 793 -27
-143 706 -106
201 546 -71

Sample Output 1

15570000.000000000000000

表示言語

/ /

Score : 100 points

문제

3차원 공간의 점 N개가 주어진다. 그중 i번째 점의 좌표는 (x_i, y_i, z_i)이다.

sungjae0506은 주어진 모든 점을 경계 및 내부에 포함하고 밑면이 z축에 수직이고 옆면이 xy평면에 수직인 삼각기둥이다.

가능한 sungjae0506 중 \frac{\text{부피}}{\text{겉넓이}}가 최소인 sungjae0506의 부피를 구해 보자.

제한

  • 3 \leq N \leq 100\,000
  • -10^8 \leq x_i, y_i, z_i \leq 10^8
  • 입력으로 주어지는 수는 모두 정수이다.
  • 주어진 N개의 점 중 가장 거리가 먼 두 점 사이의 거리가 D라 할 때, 주어진 점들을 원래의 위치로부터 10^{-6}D 이하만큼 떨어진 임의의 위치로 이동시켜도 \frac{\text{부피}}{\text{겉넓이}}가 최소인 sungjae0506이 유일하게 존재하는 경우만 주어진다.

입력

입력은 다음 형식으로 표준 입력으로 주어진다.

N
x_1 y_1 z_1
x_2 y_2 z_2
\vdots
x_N y_N z_N

출력

가능한 sungjae0506 중 \frac{\text{부피}}{\text{겉넓이}}가 최소인 sungjae0506의 부피를 출력한다. 절대/상대 오차는 10^{-9}까지 허용한다.


입력 예 1

6
88 848 44
-159 810 8
45 522 -21
163 793 -27
-143 706 -106
201 546 -71

출력 예 1

15570000.000000000000000

表示言語

/ /

配点 : 100 点

問題文

3 次元空間上の N 個の点が与えられます.そのうち i 番目の点の座標は (x_i, y_i, z_i) です.

sungjae0506 とは,与えられたすべての点を境界および内部に含み,底面が z 軸に垂直で,側面が xy 平面に垂直な三角柱です.

可能な sungjae0506 のうち,\frac{\text{体積}}{\text{表面積}} が最小となる sungjae0506 の体積を求めてください.

制約

  • 3 \leq N \leq 100\,000
  • -10^8 \leq x_i, y_i, z_i \leq 10^8
  • 入力はすべて整数
  • 与えられた N 個の点のうち,最も距離が遠い 2 点間の距離を D とします.与えられた各点を元の位置から距離 10^{-6}D 以下の任意の位置に移動させても,\frac{\text{体積}}{\text{表面積}} が最小となる sungjae0506 が一意に存在する場合のみが与えられます.

入力

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

N
x_1 y_1 z_1
x_2 y_2 z_2
\vdots
x_N y_N z_N

出力

可能な sungjae0506 のうち,\frac{\text{体積}}{\text{表面積}} が最小となる sungjae0506 の体積を出力せよ.絶対誤差または相対誤差が 10^{-9} 以下であれば正解とみなされる.


入力例 1

6
88 848 44
-159 810 8
45 522 -21
163 793 -27
-143 706 -106
201 546 -71

出力例 1

15570000.000000000000000
F - Connecting Chips

実行時間制限: 2 sec / メモリ制限: 1024 MiB

表示言語

/ /

Score : 100 points

Problem Statement

FuriosaAI officially announced the mass production of its second-generation AI accelerator, the RNGD, this year. The RNGD is a product specialized for processing language models and multimodal models, delivering powerful computational performance while consuming minimal power.

Upon hearing the news of the RNGD chip’s mass production, Sorohue ordered N RNGD chips. Sorohue’s computer has (N+2M) slots arranged in a row, each capable of holding a single chip. Of these, 2M slots are occupied by M S-chips and M C-chips, respectively. Uniquely, the S-chips and C-chips require a single S-chip and a single C-chip to be connected via wires in order to function properly.

Sorohue decided to connect the S-chips and C-chips with wires until the ordered RNGD chips arrive. Since having too many wires crossing over empty slots makes it difficult to insert chips later, when connecting two chips with a wire, the wire must cross over at most one empty slot. It is not possible to remove and rearrange the S-chips and C-chips that are already inserted.

A string T representing the state of the slots is given. Find the number of distinct ways to connect the M pairs of chips installed in Sorohue’s computer using wires.

Two methods are considered distinct if, in one method, two chips are connected by a wire, whereas in the other method they are not.

Constraints

  • 1 \le N \le 10\,000
  • 1 \le M \le 10\,000
  • Let T be a string consisting of N occurrences of E, M occurrences of S, and M occurrences of C.
    • The ith character of T represents the type of chip inserted into the ith slot, where E indicates an empty slot, S indicates an S-chip, and C indicates a C-chip.
  • All input values are integers.

Input

The input is given from Standard Input in the following format:

N M
T

Output

Print the number of ways to connect M pairs of chips with wires, modulo 998\,244\,353.


Sample Input 1

2 3
SECSCESC

Sample Output 1

4

Sample Input 2

4 1
ESEECE

Sample Output 2

0

Sample Input 3

6 11
ESSCESCCCESSCSCECCSCSESCSCES

Sample Output 3

31968

表示言語

/ /

점수 : 100 점

문제

FuriosaAI는 올해 공식적으로 2세대 AI 가속기 RNGD의 대량 생산을 발표했다. RNGD는 언어 모델 및 멀티모달 모델 처리에 특화된 제품으로, 적은 전력으로도 강력한 연산 성능을 제공한다.

RNGD 칩의 대량 생산 소식을 들은 소로휴는 RNGD 칩을 N개 주문했다. 소로휴의 컴퓨터에는 칩 하나를 꽂을 수 있는 슬롯 (N+2M)개가 나란히 있으며, 그중 2M개의 슬롯에는 S-칩과 C-칩이 각각 M개씩 꽂혀 있다. S-칩과 C-칩은 특이하게 S-칩과 C-칩을 정확히 하나씩 서로 전선으로 연결해야 올바르게 작동한다.

소로휴는 주문한 RNGD 칩이 올 때까지 모든 S-칩과 C-칩을 전선으로 연결하기로 했다. 빈 슬롯 위로 너무 많은 전선이 지나면 나중에 칩을 꽂기 어려워지기 때문에, 두 칩을 전선으로 연결할 때는 전선이 최대 하나의 빈 슬롯 위를 지나도록 연결해야 한다. 이미 꽂혀 있는 S-칩과 C-칩을 뽑아서 재배치할 수는 없다.

슬롯의 상태를 나타내는 문자열 T가 주어진다. 소로휴의 컴퓨터에 꽂혀 있는 M쌍의 칩을 전선으로 연결하는 서로 다른 방법의 수를 구해 보자.

어떤 두 칩이 한 방법에서는 서로 전선으로 연결되어 있는데 다른 방법에서는 그렇지 않은 경우 두 방법을 서로 다르다고 한다.

제한

  • 1 \le N \le 10\,000
  • 1 \le M \le 10\,000
  • T는 E N개, S M개, C M개로 구성된 문자열이다.
    • T의 i번째 문자는 i번째 슬롯에 꽂혀 있는 칩의 종류를 나타내며, E는 빈 슬롯, S는 S-칩이 꽂혀 있는 슬롯, C는 C-칩이 꽂혀 있는 슬롯을 의미한다.
  • 입력으로 주어지는 수는 모두 정수이다.

입력

입력은 다음 형식으로 표준 입력으로 주어진다.

N M
T

출력

M쌍의 칩을 전선으로 연결하는 방법의 수를 998\,244\,353으로 나눈 나머지를 출력한다.


입력 예 1

2 3
SECSCESC

출력 예 1

4

입력 예 2

4 1
ESEECE

출력 예 2

0

입력 예 3

6 11
ESSCESCCCESSCSCECCSCSESCSCES

출력 예 3

31968

表示言語

/ /

配点 : 100 点

問題文

FuriosaAIは今年、第2世代AIアクセラレータ「RNGD」の量産を正式に発表した。RNGDは言語モデルおよびマルチモーダルモデルの処理に特化した製品であり、低消費電力でありながら強力な演算性能を提供する。

RNGDチップの量産ニュースを聞いたソロヒューは、RNGDチップをN個注文した。ソロヒューのコンピュータには、チップを1つずつ差し込めるスロットが(N+2M)個並んでおり、そのうち2M個のスロットには、SチップとCチップがそれぞれM個ずつ差し込まれている。SチップとCチップは、特異なことに、1つのSチップと1つのCチップを互いに配線で接続しなければ正しく動作しない。

ソロヒューは、注文したRNGDチップが届くまで、SチップとCチップを配線で接続することにした。空いているスロットの上を配線が通りすぎると、後でチップを挿しにくくなるため、2つのチップを配線で接続する際は、配線が最大1つの空いているスロットの上を通るように接続しなければならない。すでに挿されているSチップとCチップを抜いて再配置することはできない。

スロットの状態を表す文字列 T が与えられる。ソロヒューのコンピュータに挿されている M 組のチップを配線で接続する、互いに異なる方法の数を求めよう。

ある2つのチップが、ある方法では互いに配線で接続されているが、別の方法ではそうでない場合、その2つの方法は互いに異なるとする。

制約

  • 1 \le N \le 10\,000
  • 1 \le M \le 10\,000
  • 文字列 T は、E が N 個、S が M 個、C が M 個からなる文字列である。
    • Tのi番目の文字は、i番目のスロットに挿入されているチップの種類を表し、Eはスロットが空であることを、SはSチップが挿入されていることを、CはCチップが挿入されていることを意味する
  • 入力される値はすべて整数

入力

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

N M
T

出力

M組のチップを配線で接続する方法の数を998\,244\,353で割った余りを出力する。


入力例 1

2 3
SECSCESC

出力例 1

4

入力例 2

4 1
ESEECE

出力例 2

0

入力例 3

6 11
ESSCESCCCESSCSCECCSCSESCSCES

出力例 3

31968
G - 오fill

実行時間制限: 2 sec / メモリ制限: 1024 MiB

表示言語

/ /

Score : 100 points

Problem Statement

Cenix wants to fill an N \times M grid using the following six types of square tiles. There are plenty of each type of tile, and they can be rotated before placement. When placing tiles, every edge connected to a path must touch an edge connected to a path on a neighboring tile. However, not all paths need to be connected.

While filling the grid, Cenix realized that the task was too easy. Cenix now intends to fill the remaining cells using only tiles that connect one side and tiles that connect three sides.

A grid with some cells already filled with tiles is given as follows.

  • The type of tile placed in the i-th row and j-th column of the grid is denoted by A_{i,j}.
    • If no tile is placed in that cell, A_{i,j} is -1.
    • If a tile is placed in that cell, A_{i,j} is the sum of 1 (if the tile is connected to the top edge), 2 (if connected to the bottom edge), 4 (if connected to the left edge), and 8 (if connected to the right edge).

Find the number of ways to fill the remaining cells using only these two types of tiles.

Constraints

  • 1 \le N, M \le 500\,000
  • 1 \le NM \le 500\,000
  • -1 \le A_{i,j} \le 15
  • All input values are integers.

Input

The input is given from Standard Input in the following format:

N M
A_{1,1} A_{1,2} \dots A_{1,M}
A_{2,1} A_{2,2} \dots A_{2,M}
\vdots
A_{N,1} A_{N,2} \dots A_{N,M}

Output

Output the number of ways to fill the grid, modulo 998\,244\,353.


Sample Input 1

3 3
10 -1 6
-1 -1 -1
9 -1 -1

Sample Output 1

2

Sample Input 2

1 3
-1 -1 -1

Sample Output 2

0

Sample Input 3

5 5
-1 -1 0 0 0
-1 -1 0 0 0
0 0 -1 0 -1
0 0 3 0 3
0 0 -1 0 -1

Sample Output 3

2

表示言語

/ /

점수 : 100 점

문제

세닉스는 다음 6종류의 정사각형 타일을 이용해 N \times M 크기의 격자판을 채우려 한다. 각 타일은 충분히 많으며 회전해서 놓을 수 있다. 타일을 놓을 때는 길이 연결된 모든 변이 이웃한 타일의 길이 연결된 변과 맞닿아야 한다. 모든 길이 하나로 연결될 필요는 없다.

세닉스는 격자판을 채우다가 격자판을 채우는 게 너무 쉽다는 생각이 들었다. 세닉스는 남은 칸을 한 변에 길이 연결된 타일과 세 변에 길이 연결된 타일만을 이용해 전부 채우려 한다.

일부 칸을 타일로 채운 격자판이 다음과 같이 주어진다.

  • 격자판의 위에서부터 i번째, 왼쪽에서부터 j번째 칸에 놓인 타일의 종류는 A_{i,j}다.
    • 해당 칸에 타일이 놓여 있지 않다면 A_{i,j}는 -1이다.
    • 해당 칸에 타일이 놓여 있다면 A_{i,j}는 그 타일의 윗변에 길이 연결된 경우 1, 아랫변에 길이 연결된 경우 2, 왼변에 길이 연결된 경우 4, 오른변에 길이 연결된 경우 8을 모두 더한 값이다.

남은 칸을 두 종류의 타일로 모두 채우는 방법의 수를 구해 보자.

제한

  • 1 \le N, M \le 500\,000
  • 1 \le NM \le 500\,000
  • -1 \le A_{i,j} \le 15
  • 입력으로 주어지는 수는 모두 정수이다.

입력

입력은 다음 형식으로 표준 입력으로 주어진다.

N M
A_{1,1} A_{1,2} \dots A_{1,M}
A_{2,1} A_{2,2} \dots A_{2,M}
\vdots
A_{N,1} A_{N,2} \dots A_{N,M}

출력

격자판을 채우는 방법의 수를 998\,244\,353으로 나눈 나머지를 출력한다.


입력 예 1

3 3
10 -1 6
-1 -1 -1
9 -1 -1

출력 예 1

2

입력 예 2

1 3
-1 -1 -1

출력 예 2

0

입력 예 3

5 5
-1 -1 0 0 0
-1 -1 0 0 0
0 0 -1 0 -1
0 0 3 0 3
0 0 -1 0 -1

출력 예 3

2

表示言語

/ /

配点 : 100 点

問題文

セニックスは、以下の6種類の正方形タイルを使って、N \times Mサイズの格子盤を埋めようとしている。各タイルは十分にあり、回転させて配置することができる。タイルを配置する際は、道が接続されたすべての辺が、隣接するタイルの道が接続された辺と接していなければならない。すべての道が一つにつながっている必要はない。

セニックスは格子盤を埋めているうちに、格子盤を埋めるのがあまりにも簡単だと感じた。セニックスは、残りのマスを一辺のみをつなぐタイルと三辺をつなぐタイルのみを利用してすべて埋めようとしている。

一部のマスをタイルで埋めた格子盤が以下のように与えられる。

  • 格子盤の上から数えてi番目、左から数えてj番目のマスに置かれたタイルの種類はA_{i,j}である。
    • 該当するマスにタイルが置かれていない場合、A_{i,j}は-1である。
    • 該当するマスにタイルが置かれている場合、A_{i,j}はそのタイルの上辺に道が接続されている場合は1、下辺に道が接続されている場合は2、左辺に道が接続されている場合は4、右辺に道が接続されている場合は8をすべて足した値である。

残りのマスを2種類のタイルで全て埋める方法の数を求めよ。

制約

  • 1 \le N, M \le 500\,000
  • 1 \le NM \le 500\,000
  • -1 \le A_{i,j} \le 15
  • 入力される値はすべて整数

入力

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

N M
A_{1,1} A_{1,2} \dots A_{1,M}
A_{2,1} A_{2,2} \dots A_{2,M}
\vdots
A_{N,1} A_{N,2} \dots A_{N,M}

出力

格子盤を埋める方法の数を998\,244\,353で割った余りを出力する。


入力例 1

3 3
10 -1 6
-1 -1 -1
9 -1 -1

出力例 1

2

入力例 2

1 3
-1 -1 -1

出力例 2

0

入力例 3

5 5
-1 -1 0 0 0
-1 -1 0 0 0
0 0 -1 0 -1
0 0 3 0 3
0 0 -1 0 -1

出力例 3

2
H - SCSC Card Game

実行時間制限: 2 sec / メモリ制限: 1024 MiB

表示言語

/ /

Score : 100 points

Problem Statement

SCSC has N members. Each member has one spade card and one club card. Member i's spade card has integer S_i written on it, and their club card has integer C_i written on it.

The members of SCSC are standing in a line in the order from member 1 to member N to play the SCSC card game. Terra, the host of the game, must choose two adjacent members and make them play one of the following two duels.

  • The two members each reveal the spade card with the smallest integer among their spade cards. The member who reveals the card with the larger integer wins. The losing member gives all of their club cards to the winning member and leaves.

  • The two members each reveal the club card with the smallest integer among their club cards. The member who reveals the card with the larger integer wins. The losing member gives all of their spade cards to the winning member and leaves.

Any cards that the leaving member does not give to the winning member are no longer used in the game. If there were members on both sides of the leaving member, those two members become adjacent to each other.

After N-1 duels, exactly one member remains.

The last remaining member gives Terra one card with the smallest integer among their spade cards and one card with the smallest integer among their club cards, then leaves.

Let S_{\mathrm{sum}} be the sum of the integers written on all spade cards initially held by all members, and let C_{\mathrm{sum}} be the sum of the integers written on all club cards initially held by all members. Let S_f be the integer written on the spade card Terra receives at the end, and let C_f be the integer written on the club card Terra receives at the end. Then Terra's final score is (S_{\mathrm{sum}} - S_f)(C_{\mathrm{sum}} - C_f).

Terra wants the final score to be as small as possible. Find the minimum possible score Terra can obtain.

Constraints

  • 1 \leq N \leq 5\,000
  • 1 \leq S_i, C_i \leq 50\,000
  • For all 1 \leq i < j \leq N, S_i \neq S_j and C_i \neq C_j.
  • All given numbers are integers.

Input

The input is given from Standard Input in the following format:

N
S_1 C_1
S_2 C_2
\vdots
S_N C_N

Output

Output the minimum possible score Terra can obtain.


Sample Input 1

2
3 4
4 5

Sample Output 1

15

表示言語

/ /

Score : 100 points

문제

SCSC에는 N명의 부원이 있다. 각 부원은 스페이드 카드와 클로버 카드를 한 장씩 가지고 있다. i번 부원이 가진 스페이드 카드에는 정수 S_i, 클로버 카드에는 정수 C_i가 적혀 있다.

SCSC 부원들은 SCSC 카드 놀이를 하기 위해 1번부터 N번까지 순서대로 서 있다. 게임의 진행자인 테라는 인접하게 서 있는 두 부원을 골라 다음 두 가지 대결 중 하나를 시켜야 한다.

  • 두 부원이 각자 자신이 가진 스페이드 카드 중 적힌 수가 가장 작은 카드를 공개한다. 더 큰 수가 적힌 카드를 공개한 부원이 승리한다. 패배한 부원은 자신이 가진 클로버 카드를 모두 승리한 부원에게 넘겨주고 퇴장한다.

  • 두 부원이 각자 자신이 가진 클로버 카드 중 적힌 수가 가장 작은 카드를 공개한다. 더 큰 수가 적힌 카드를 공개한 부원이 승리한다. 패배한 부원은 자신이 가진 스페이드 카드를 모두 승리한 부원에게 넘겨주고 퇴장한다.

퇴장한 부원이 승리한 부원에게 넘겨주지 않은 카드는 더 이상 게임에 사용되지 않는다. 퇴장한 부원의 양옆에 부원이 모두 있었다면 그 두 부원은 새로 인접하게 된다.

N-1번 대결을 하고 나면 마지막에 단 한 명의 부원만 남는다.

마지막에 남은 부원은 자신이 가진 스페이드 카드 중 적힌 수가 가장 작은 카드 한 장과 클로버 카드 중 적힌 수가 가장 작은 카드 한 장을 테라에게 주고 퇴장한다.

처음 모든 부원이 가진 스페이드 카드에 적힌 정수의 합을 S_{\mathrm{sum}}, 클로버 카드에 적힌 정수의 합을 C_{\mathrm{sum}}이라고 하자. 마지막에 테라가 받은 스페이드 카드에 적힌 수를 S_f, 클로버 카드에 적힌 수를 C_f라고 하면, 테라의 최종 점수는 (S_{\mathrm{sum}} - S_f)(C_{\mathrm{sum}} - C_f)가 된다.

테라는 마지막에 얻게 되는 점수를 최소화하고자 한다. 테라가 얻을 수 있는 점수의 최솟값을 구해 보자.

제한

  • 1 \leq N \leq 5\,000
  • 1 \leq S_i, C_i \leq 50\,000
  • 모든 1 \leq i < j \leq N에 대해 S_i \neq S_j이고 C_i \neq C_j이다.
  • 입력으로 주어지는 수는 모두 정수이다.

입력

입력은 다음 형식으로 표준 입력으로 주어진다.

N
S_1 C_1
S_2 C_2
\vdots
S_N C_N

출력

테라가 얻을 수 있는 점수의 최솟값을 출력한다.


입력 예 1

2
3 4
4 5

출력 예 1

15

表示言語

/ /

配点 : 100 点

問題文

SCSC には N 人の部員がいる.各部員は スペードカード と クラブカード を 1 枚ずつ持っている.部員 i が持つスペードカードには整数 S_i が,クラブカードには整数 C_i が書かれている.

SCSC の部員たちは,SCSC カードゲームをするために 1 番から N 番まで順番に一列に並んでいる.ゲームの進行役であるテラは,隣り合う 2 人の部員を選び,次の 2 種類の対戦のうち一方をさせなければならない.

  • 2 人の部員がそれぞれ,自分が持つスペードカードのうち書かれている整数が最も小さいカードを公開する.より大きい整数が書かれたカードを公開した部員が勝利する.敗北した部員は自分が持つクラブカードをすべて勝利した部員に渡して退場する.

  • 2 人の部員がそれぞれ,自分が持つクラブカードのうち書かれている整数が最も小さいカードを公開する.より大きい整数が書かれたカードを公開した部員が勝利する.敗北した部員は自分が持つスペードカードをすべて勝利した部員に渡して退場する.

退場した部員が勝利した部員に渡さなかったカードは,以後ゲームでは使用されない.退場した部員の両隣に部員がともに存在した場合,その 2 人の部員は新たに隣り合うことになる.

N-1 回の対戦を行うと,最後にはただ 1 人の部員だけが残る.

最後に残った部員は,自分が持つスペードカードのうち書かれている整数が最も小さいカード 1 枚と,クラブカードのうち書かれている整数が最も小さいカード 1 枚をテラに渡して退場する.

最初にすべての部員が持つスペードカードに書かれた整数の合計を S_{\mathrm{sum}},クラブカードに書かれた整数の合計を C_{\mathrm{sum}} とする.最後にテラが受け取ったスペードカードに書かれた整数を S_f,クラブカードに書かれた整数を C_f とすると,テラの最終得点は (S_{\mathrm{sum}} - S_f)(C_{\mathrm{sum}} - C_f) となる.

テラは最後に得られる得点をできるだけ小さくしたい.テラが得られる得点の最小値を求めよ.

制約

  • 1 \leq N \leq 5\,000
  • 1 \leq S_i, C_i \leq 50\,000
  • すべての 1 \leq i < j \leq N について,S_i \neq S_j かつ C_i \neq C_j である.
  • 入力される数値はすべて整数である.

入力

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

N
S_1 C_1
S_2 C_2
\vdots
S_N C_N

出力

テラが得られる得点の最小値を出力せよ.


入力例 1

2
3 4
4 5

出力例 1

15
I - Tree, Game, and Query

実行時間制限: 2 sec / メモリ制限: 1024 MiB

表示言語

/ /

Score : 100 points

Problem Statement

Terra and Lulu are playing a board game on a tree consisting of N vertices and N-1 edges. Each vertex i of the tree has a weight V_i and a multiplier W_i. The i-th edge of the tree connects vertices u_i and v_i. Initially, all multipliers W_i are 1, and vertex 1 is the root.

When a game starts, all stones currently on each vertex i are removed, and V_i \cdot W_i stones are placed on that vertex. The players take turns performing the following action.

  1. Choose a non-root vertex with at least 1 stone on it.

  2. Choose one or more stones on the chosen vertex and move them to its parent vertex.

The player who can no longer perform an action loses, and the other player wins. Each game starts with Terra.

Terra and Lulu are so good at the game that they found it monotonous. They decided to play Q games while performing the following two types of queries in order.

  • 1 x y: For every vertex i on the shortest path between vertices x and y, change its multiplier W_i to 1 - W_i. In other words, 0 changes to 1, and 1 changes to 0.

  • 2 z: Change the root of the tree to vertex z. If vertex z is already the root of the tree, nothing happens.

Each time a query is performed, Terra and Lulu start a new game from the beginning. For each of the Q games, determine who wins if both players play optimally. The effects of all queries are cumulative.

Constraints

  • 2 \leq N \leq 300\,000
  • 1 \leq Q \leq 500\,000
  • 1 \leq V_i \leq 10^9
  • 1 \leq u_i, v_i \leq N
  • 1 \leq x, y, z \leq N
  • u_i \ne v_i
  • All given numbers are integers.
  • The given graph is a tree.

Input

The input is given from Standard Input in the following format:

N Q
V_1 V_2 \dots V_N
u_1 v_1
u_2 v_2
\vdots
u_{N-1} v_{N-1}
\mathrm{query}_1
\mathrm{query}_2
\vdots
\mathrm{query}_Q

Each query is given in one of the following two formats.

1 x y
2 z

Output

For each game played after a query, output Terra if Terra wins, and Lulu if Lulu wins, one per line.


Sample Input 1

4 4
10 1 2 3
1 2
1 3
1 4
2 1
1 2 3
2 2
1 1 1

Sample Output 1

Lulu
Terra
Lulu
Terra

表示言語

/ /

Score : 100 points

문제

테라와 루루는 N개의 정점과 N-1개의 간선으로 이루어진 트리 위에서 보드게임을 하고 있다. 트리의 각 정점 i마다 가중치 V_i와 배수 W_i가 있다. 트리의 i번째 간선은 두 정점 u_i와 v_i를 연결한다. 처음에 모든 배수 W_i는 1이고 1번 정점이 루트 정점이다.

게임이 시작되면 각 정점 i에 있던 돌을 치우고 V_i \cdot W_i개의 돌을 올린다. 각 플레이어가 번갈아 가며 다음 행동을 수행한다.

  1. 돌이 1개 이상 올려져 있는 루트 아닌 정점을 하나 선택한다.

  2. 선택한 정점 위에 있는 돌을 하나 이상 원하는 만큼 선택해 부모 정점 위에 올린다.

더 이상 행동을 수행할 수 없는 플레이어가 패배하고 상대편이 승리한다. 게임은 항상 테라부터 시작한다.

테라와 루루는 게임을 너무 잘하는 나머지 게임이 단조롭다고 생각했다. 테라와 루루는 다음과 같은 두 종류의 쿼리를 차례대로 수행하면서 Q번의 게임을 진행하기로 했다.

  • 1 x y: x번 정점과 y번 정점을 잇는 최단 경로 위에 존재하는 모든 정점 i의 배수 W_i를 1 - W_i로 변경한다. 즉, 0은 1로, 1은 0으로 바뀐다.

  • 2 z: z번 정점을 트리의 루트로 변경한다. z번 정점이 이미 트리의 루트라면 아무 일도 일어나지 않는다.

각 쿼리를 수행할 때마다 테라와 루루는 처음부터 게임을 시작한다. 두 플레이어가 승리하기 위해 최선을 다할 때 Q번의 게임마다 누가 승리하는지 구해 보자. 모든 쿼리의 효과는 누적된다.

제한

  • 2 \leq N \leq 300\,000
  • 1 \leq Q \leq 500\,000
  • 1 \leq V_i \leq 10^9
  • 1 \leq u_i, v_i \leq N
  • 1 \leq x, y, z \leq N
  • u_i \ne v_i
  • 주어지는 모든 수는 정수이다.
  • 주어지는 그래프는 트리이다.

입력

입력은 다음 형식으로 표준 입력으로 주어진다.

N Q
V_1 V_2 \dots V_N
u_1 v_1
u_2 v_2
\vdots
u_{N-1} v_{N-1}
\mathrm{query}_1
\mathrm{query}_2
\vdots
\mathrm{query}_Q

쿼리는 다음 형식으로 주어진다.

1 x y
2 z

출력

테라와 루루가 게임을 진행할 때마다 테라가 승리한다면 Terra, 루루가 승리한다면 Lulu를 한 줄에 하나씩 출력한다.


입력 예 1

4 4
10 1 2 3
1 2
1 3
1 4
2 1
1 2 3
2 2
1 1 1

출력 예 1

Lulu
Terra
Lulu
Terra

表示言語

/ /

配点 : 100 点

問題文

テラとルルは,N 個の頂点と N-1 本の辺からなる木の上でボードゲームをしている.木の各頂点 i には重み V_i と倍率 W_i がある.木の i 番目の辺は頂点 u_i と頂点 v_i を結ぶ.最初,すべての倍率 W_i は 1 であり,1 番頂点が根である.

ゲームが始まると,各頂点 i に置かれている石をすべて取り除き,その頂点に V_i \cdot W_i 個の石を置く.プレイヤーは交互に次の行動を行う.

  1. 石が 1 個以上置かれている,根でない頂点を 1 つ選ぶ.

  2. 選んだ頂点上の石を 1 個以上好きな個数選び,親頂点 の上に置く.

これ以上行動できないプレイヤーが敗北し,相手が勝利する.各ゲームはテラから始まる.

テラとルルはゲームがあまりにも得意なため,ゲームが単調だと考えた.テラとルルは次の 2 種類のクエリを順に実行しながら,Q 回のゲームを行うことにした.

  • 1 x y: 頂点 x と頂点 y を結ぶ最短経路上に存在するすべての頂点 i の倍率 W_i を 1 - W_i に変更する.すなわち,0 は 1 に,1 は 0 に変わる.

  • 2 z: 頂点 z を木の根に変更する.頂点 z がすでに木の根である場合,何も起こらない.

各クエリを実行するたびに,テラとルルは最初からゲームを始める.両プレイヤーが勝利のために最善を尽くすとき,Q 回の各ゲームで誰が勝利するか求めよ.すべてのクエリの効果は累積する.

制約

  • 2 \leq N \leq 300\,000
  • 1 \leq Q \leq 500\,000
  • 1 \leq V_i \leq 10^9
  • 1 \leq u_i, v_i \leq N
  • 1 \leq x, y, z \leq N
  • u_i \ne v_i
  • 入力される数値はすべて整数である.
  • 与えられるグラフは木である.

入力

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

N Q
V_1 V_2 \dots V_N
u_1 v_1
u_2 v_2
\vdots
u_{N-1} v_{N-1}
\mathrm{query}_1
\mathrm{query}_2
\vdots
\mathrm{query}_Q

各クエリは次の 2 つの形式のいずれかで与えられる.

1 x y
2 z

出力

各クエリの後に行うゲームについて,テラが勝利するなら Terra,ルルが勝利するなら Lulu を 1 行に出力せよ.


入力例 1

4 4
10 1 2 3
1 2
1 3
1 4
2 1
1 2 3
2 2
1 1 1

出力例 1

Lulu
Terra
Lulu
Terra
J - ChannelTalk Workflow

実行時間制限: 2 sec / メモリ制限: 1024 MiB

表示言語

/ /

Score : 100 points

Problem Statement

ChannelTalk, an all-in-one AI messenger that facilitates real-time communication with customers, offers a workflow feature that allows anyone to easily create chatbots. Using ChannelTalk Workflow, you can combine triggers and actions like building blocks based on the customer and the situation to automate the entire process from the start to the end of a consultation. Additionally, frequently used functions can be created as modules and reused multiple times.

Ino intends to build a chatbot using ChannelTalk Workflow to handle N different types of questions. Each question is assigned a unique number from 1 to N.

Ino wants to add M modules to the workflow and number them from 0 to M-1 in the order they are added. Since Ino cannot manage too many modules, at most 2\,048 modules can be used.

When question x is entered, module i operates as follows.

  • If x = i, it answers the question and ends the consultation.
  • If x \neq i, it enters question x to module L_i if x \le F_i, and module G_i if x \gt F_i.

When a question is received, it is first input to module 0, and executing each module takes 1 second. That is, the time taken to process question i is equal to the total number of modules passed through, including module 0 and module i, until the consultation ends. If the same module is passed through multiple times, it is counted as many times as it was passed through.

Ino wants to ensure that the consultation ends in exactly K seconds regardless of which question from 1 to N is asked. Given the number of question types N and the ending time K, choose the number of modules M and the values of F_i, L_i, and G_i for each module so that the consultation always ends exactly at K seconds using at most 2\,048 modules. Note that M does not need to be minimized.

Constraints

  • 2 \le K \le N \le 1\,000
  • All input values are integers.

Input

The input is given from Standard Input in the following format:

N K

Output

On the first line, output the number of modules M to use. (1 \le M \le 2\,048)

From the second line, output M lines. On the (i+2)-th line, output three integers F_i, L_i, and G_i representing module i, separated by spaces. (0 \le F_i \le N;\ 0 \le L_i, G_i < M)

If no solution exists, output -1 instead.


Sample Input 1

6 6

Sample Output 1

11
1 7 1
2 7 2
3 7 3
4 7 4
5 5 6
4 0 0
5 0 0
3 8 4
2 9 3
1 10 2
0 0 1

表示言語

/ /

점수 : 100 점

문제

고객과의 실시간 소통을 편리하게 해주는 올인원 AI 메신저 채널톡은 누구나 쉽게 챗봇을 만들 수 있도록 워크플로우 기능을 제공한다. 채널톡 워크플로우를 이용해 고객과 상황에 따라 필요한 트리거와 액션을 블록처럼 조합해 상담 시작부터 끝까지 전 과정을 자동화할 수 있다. 또한 반복적으로 필요한 기능은 모듈로 만들어 여러 번 재활용할 수도 있다.

이노는 채널톡 워크플로우를 이용해 N종류의 서로 다른 질문을 처리하는 챗봇을 제작하려 한다. 각 질문에는 1번부터 N번까지의 서로 다른 번호가 매겨져 있다.

이노는 워크플로우에 M개의 모듈을 추가하고 추가한 순서대로 0번부터 M-1번까지 번호를 매기고자 한다. 이노는 너무 많은 모듈을 관리할 능력이 없기 때문에 최대 2\,048개의 모듈만 사용할 수 있다.

i번 모듈은 x번 질문이 입력되었을 때 다음과 같이 작동한다.

  • x = i인 경우 해당 질문에 답변한 뒤 상담을 종료한다.
  • x \neq i인 경우 x \le F_i면 L_i번 모듈, x \gt F_i면 G_i번 모듈에 x번 질문을 입력한다.

질문이 들어오면 처음에 0번 모듈에 입력되며, 각 모듈을 실행하는 데에는 1초가 걸린다. 즉, i번 질문을 처리하는 데 걸리는 시간은 0번 모듈과 i번 모듈을 포함해 상담을 종료할 때까지 거쳐간 모듈의 총 개수와 같다. 같은 모듈을 여러 번 거쳐간 경우 거쳐간 횟수만큼 중복해 센다.

이노는 1번부터 N번까지 중 어느 질문을 해도 정확히 K초만에 상담이 종료되도록 만들고자 한다. 질문의 종류 N과 종료 시간 K가 주어질 때 모듈의 수 M과 각 모듈의 F_i, L_i, G_i를 적절히 정해 2\,048개 이하의 모듈로 항상 정확히 K초만에 상담이 끝나도록 만들어 보자. M을 최소화할 필요는 없음에 유의하라.

제한

  • 2 \le K \le N \le 1\,000
  • 입력으로 주어지는 수는 모두 정수이다.

입력

입력은 다음 형식으로 표준 입력으로 주어진다.

N K

출력

첫 번째 줄에 사용할 모듈의 수 M을 출력한다. (1 \le M \le 2\,048)

두 번째 줄부터 M개의 줄에 걸쳐, i+2번째 줄에 i번 모듈의 규칙을 나타내는 세 정수 F_i, L_i, G_i를 공백으로 구분하여 출력한다. (0 \le F_i \le N;\ 0 \le L_i, G_i < M)

가능한 방법이 존재하지 않는 경우 대신 -1을 출력한다.


입력 예 1

6 6

출력 예 1

11
1 7 1
2 7 2
3 7 3
4 7 4
5 5 6
4 0 0
5 0 0
3 8 4
2 9 3
1 10 2
0 0 1

表示言語

/ /

配点 : 100 点

問題文

顧客とのリアルタイムなコミュニケーションを便利にするオールインワン AI メッセンジャー ChannelTalk は,誰でも簡単にチャットボットを作れるようにワークフロー機能を提供している.ChannelTalk Workflow を利用すると,顧客や状況に応じて必要なトリガーとアクションをブロックのように組み合わせ,相談の開始から終了までの全過程を自動化できる.また,繰り返し必要な機能はモジュールとして作り,何度も再利用できる.

イノは ChannelTalk Workflow を利用して,N 種類の互いに異なる質問を処理するチャットボットを作ろうとしている.各質問には 1 番から N 番までの互いに異なる番号が付いている.

イノはワークフローに M 個のモジュールを追加し,追加した順に 0 番から M-1 番までの番号を付けたいと考えている.イノはあまり多くのモジュールを管理する能力がないため,最大 2\,048 個のモジュールしか使用できない.

i 番モジュールは x 番質問が入力されたとき次のように動作する.

  • x = i の場合,その質問に回答した後,相談を終了する.
  • x \neq i の場合,x \le F_i なら L_i 番モジュールに,x \gt F_i なら G_i 番モジュールに x 番質問を入力する.

質問が入力されると,最初に 0 番モジュールに入力され,各モジュールの実行には 1 秒かかる.すなわち,i 番の質問を処理するのにかかる時間は,0 番モジュールと i 番モジュールを含め,相談が終了するまでに通過したモジュールの総数に等しい.同じモジュールを複数回通過した場合は,通過した回数だけ重複して数える.

イノは,1 番から N 番までのどの質問が来ても,相談が 正確に K 秒で終了するようにしたい.質問の種類 N と終了時間 K が与えられるので,モジュールの数 M と各モジュールの F_i, L_i, G_i を適切に定め,2\,048 個以下のモジュールで常に正確に K 秒で相談が終わるようにしよう.M を最小化する必要はない.

制約

  • 2 \le K \le N \le 1\,000
  • 入力される数値はすべて整数

入力

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

N K

出力

1行目に使用するモジュール数 M を出力する.(1 \le M \le 2\,048)

2行目から M 行にわたり,i+2 行目に i 番モジュールを表す 3 つの整数 F_i, L_i, G_i を空白区切りで出力する.(0 \le F_i \le N;\ 0 \le L_i, G_i < M)

可能な方法が存在しない場合は,代わりに -1 を出力する.


入力例 1

6 6

出力例 1

11
1 7 1
2 7 2
3 7 3
4 7 4
5 5 6
4 0 0
5 0 0
3 8 4
2 9 3
1 10 2
0 0 1
K - Storing Roll Cake

実行時間制限: 2 sec / メモリ制限: 1024 MiB

表示言語

/ /

Score : 100 points

Problem Statement

Coshaman bought a roll cake of length L for the SCSC clubroom. The roll cake consists of L consecutive pieces of length 1, and the preference value of the i-th piece from the left is V_i.

Lulu wants to store the roll cake in a refrigerator. However, the clubroom refrigerator cannot store a roll cake of length greater than K, so Lulu decided to cut the roll cake into pieces of length at most K. Since cutting through a piece would make it ugly, Lulu must cut only between adjacent pieces.

When a roll cake is put into the refrigerator, only the end piece is visible from outside. Since the roll cakes must be put in with a fixed orientation, only the rightmost piece of each cut roll cake is visible. Lulu likes pretty things, so Lulu defines the beauty of storage as the sum of the preference values of the visible pieces.

Cutting a roll cake is hard work, so Lulu wants to store it with large beauty of storage while using little effort. When cutting a roll cake of length s into two roll cakes of lengths x and y (x+y=s), the required effort is x \times y. If several cuts are made, the effort required for the storage is the sum of the effort required for each cut.

Given L, K, and the preference values of each roll cake piece, find the maximum possible value of (\text{beauty of storage}) - (\text{effort required for storage}).

Constraints

  • 1 \leq K \leq L \leq 1\,000\,000
  • 0 \leq V_i \leq 10^9
  • All given numbers are integers.

Input

The input is given from Standard Input in the following format:

L K
V_1 V_2 \dots V_L

Output

Output the maximum possible value of (\text{beauty of storage}) - (\text{effort required for storage}).


Sample Input 1

4 4
1 2 3 4

Sample Output 1

4

Sample Input 2

3 1
1 2 3

Sample Output 2

3

表示言語

/ /

Score : 100 points

문제

집돌이 페렐만은 SCSC 동아리방에 길이가 L인 롤케이크를 사 왔다. 롤케이크는 길이가 1인 연속된 L개의 조각으로 이루어져 있으며, 왼쪽에서부터 i번째 조각의 선호도는 V_i이다.

루루는 롤케이크를 냉장고에 보관하려고 한다. 하지만 동아리방 냉장고는 길이가 K를 초과하는 롤케이크를 보관할 수 없기 때문에 루루는 롤케이크를 K 이하의 길이로 나누기로 했다. 롤케이크의 조각을 나누면 못생겨지기 때문에 조각과 조각 사이를 잘라야 한다.

롤케이크를 냉장고에 넣으면 맨 끝에 있는 조각만 밖에서 보이게 된다. 방향을 맞춰 넣어야 하기 때문에 잘린 각 롤케이크의 오른쪽 끝 조각만 눈에 보인다. 예쁜 것을 좋아하는 루루는 눈에 보이는 조각들의 선호도 합을 보관의 아름다움이라고 정의했다.

롤케이크를 자르는 것은 힘든 일이기 때문에 보관의 아름다움을 크게 하면서도 힘이 적게 들게 보관하고 싶다. 길이가 s인 롤케이크를 길이가 x와 y인 두 롤케이크로 자를 때 (x+y=s) 소모되는 힘은 xy이다. 여러 번 자르는 경우, 보관에 소모된 힘은 각 절단에서 소모되는 힘의 합이다.

L, K, 각 롤케이크 조각의 선호도가 주어질 때 (\text{보관의 아름다움}) - (\text{보관에 소모된 힘})의 최댓값을 구해 보자.

제한

  • 1 \leq K \leq L \leq 10^6
  • 0 \leq V_i \leq 10^9
  • 입력으로 주어지는 수는 모두 정수이다.

입력

입력은 다음 형식으로 표준 입력으로 주어진다.

L K
V_1 V_2 \dots V_L

출력

롤케이크를 보관할 때 (\text{보관의 아름다움}) - (\text{보관에 소모된 힘})의 최댓값을 출력한다.


입력 예 1

4 4
1 2 3 4

출력 예 1

4

입력 예 2

3 1
1 2 3

출력 예 2

3

表示言語

/ /

配点 : 100 点

問題文

暁山 瑞希は SCSC の部室に長さ L のロールケーキを買ってきた.ロールケーキは長さ 1 の連続した L 個のピースからなり,左から i 番目のピースの好み度は V_i である.

ルルはロールケーキを冷蔵庫に保管しようとしている.しかし,部室の冷蔵庫には長さが K を超えるロールケーキを保管できないため,ルルはロールケーキを長さ K 以下に切り分けることにした.ロールケーキのピースを切ると見た目が悪くなるため,ピースとピースの間だけを切らなければならない.

ロールケーキを冷蔵庫に入れると,端のピースだけが外から見える.向きをそろえて入れる必要があるため,切り分けられた各ロールケーキの右端のピースだけが見える.かわいいものが好きなルルは,見えるピースの好み度の合計を保管の美しさと定義した.

ロールケーキを切るのは大変なので,保管の美しさを大きくしつつ,少ない労力で保管したい.長さ s のロールケーキを長さ x と y の 2 つのロールケーキに切るとき(x+y=s),消費される労力は x \times y である.複数回切る場合,保管に消費された労力は,各切断で消費された労力の総和である.

L,K,各ロールケーキのピースの好み度が与えられる.(\text{保管の美しさ}) - (\text{保管に消費された労力}) の最大値を求めよ.

制約

  • 1 \leq K \leq L \leq 1\,000\,000
  • 0 \leq V_i \leq 10^9
  • 入力される数値はすべて整数である.

入力

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

L K
V_1 V_2 \dots V_L

出力

ロールケーキを保管するときの (\text{保管の美しさ}) - (\text{保管に消費された労力}) の最大値を出力せよ.


入力例 1

4 4
1 2 3 4

出力例 1

4

入力例 2

3 1
1 2 3

出力例 2

3
L - Lulu, the Magician

実行時間制限: 5 sec / メモリ制限: 1024 MiB

表示言語

/ /

Score : 100 points

Problem Statement

Lulu is actually a genius magician. After a long period of research, Lulu developed a secret magic of her own using a magic circle.

The magic circle Lulu uses is a tree structure consisting of N spells and N-1 connections. The spells are numbered in order from 1 to N, and Lulu can strengthen each spell. The i-th connection of the magic circle means that spell a_i and spell b_i are directly connected.

Initially, the power of every spell is 0. When Lulu strengthens spell r by w, the power W_r of spell r increases by w.

Lulu can cast magic by choosing two spells u and v in the magic circle. When Lulu casts magic, every spell in the magic circle interacts with the set P(u,v) of vertices on the unique simple path connecting u and v. The final power of the magic Lulu casts can be calculated by the following formula. Here, d(a,b) is the number of edges on the unique simple path connecting a and b.

\sum_{x \in P(u, v)} \sum_{r=1}^{N} W_r \times d(r, x)

The genius magician Lulu wants to learn magic by performing the following two types of actions in order, Q times in total.

  • 1 v w: Increase the power of spell v by w.

  • 2 u v: Choose spells u and v and cast magic.

For each action of type 2, compute the final power of the cast magic modulo 998\,244\,353.

Constraints

  • 1 \leq N, Q \leq 200\,000
  • 1 \leq a_i, b_i \leq N
  • a_i \ne b_i
  • The given magic circle is a tree.
  • In an action of the form 1 v w, 1 \leq v \leq N and 1 \leq w \leq 10^9.
  • In an action of the form 2 u v, 1 \leq u, v \leq N.
  • All given numbers are integers.

Input

The input is given from Standard Input in the following format:

N Q
a_1 b_1
a_2 b_2
\vdots
a_{N-1} b_{N-1}
\mathrm{action}_1
\mathrm{action}_2
\vdots
\mathrm{action}_Q

Output

For each action of type 2, output one line containing the final power of the cast magic modulo 998\,244\,353.


Sample Input 1

4 3
1 2
2 3
3 4
1 2 5
1 4 3
2 1 4

Sample Output 1

38

表示言語

/ /

Score : 100 points

문제

루루는 사실 천재 마법사이다. 루루는 오랜 연구 끝에 마법진을 활용한 자신만의 비전 마법을 개발했다.

루루가 다루는 마법진은 N개의 마법과 N-1개의 연결 관계로 이루어진 트리 구조이다. 각 마법은 1부터 N까지 번호가 순서대로 매겨져 있으며 루루가 강화할 수 있다. 마법진의 i번째 연결 관계는 마법 a_i와 마법 b_i가 서로 직접 연결되어 있음을 의미한다.

처음에 모든 마법의 위력은 0이다. 루루가 마법 r을 w만큼 강화하면 r의 위력 W_r가 w만큼 증가한다.

루루는 마법진의 두 마법 u와 v를 선택해 마법을 시전할 수 있다. 루루가 마법을 시전하면 마법진에 있는 모든 마법이 u와 v를 연결하는 유일한 단순 경로에 있는 정점의 집합 P(u,v)와 상호 작용을 한다. 루루가 시전한 마법의 최종 위력은 아래와 같은 식으로 계산할 수 있다. d(a,b)는 a와 b를 연결하는 유일한 단순 경로에 있는 간선의 개수이다.

\sum_{x \in P(u, v)} \sum_{r=1}^{N} W_r \times d(r, x)

천재 마법사 루루는 다음과 같은 두 종류의 행동을 Q번 차례대로 수행하면서 마법을 익히려 한다.

  • 1 v w: 마법 v의 위력을 w만큼 증가시킨다.

  • 2 u v: 마법 u와 v를 선택해 마법을 시전한다.

2번 행동을 수행할 때마다 시전한 마법의 최종 위력을 998\,244\,353으로 나눈 나머지를 계산해 보자.

제한

  • 1 \leq N, Q \leq 200\,000
  • 1 \leq a_i, b_i \leq N
  • a_i \ne b_i
  • 주어지는 마법진은 트리 구조이다.
  • 1 v w 형식의 행동에서 1 \leq v \leq N, 1 \leq w \leq 10^9이다.
  • 2 u v 형식의 행동에서 1 \leq u, v \leq N이다.
  • 입력으로 주어지는 수는 모두 정수이다.

입력

입력은 다음 형식으로 표준 입력으로 주어진다.

N Q
a_1 b_1
a_2 b_2
\vdots
a_{N-1} b_{N-1}
\mathrm{action}_1
\mathrm{action}_2
\vdots
\mathrm{action}_Q

출력

2번 행동을 수행할 때마다 시전한 마법의 최종 위력을 998\,244\,353으로 나눈 나머지를 한 줄에 하나씩 출력한다.


입력 예 1

4 3
1 2
2 3
3 4
1 2 5
1 4 3
2 1 4

출력 예 1

38

表示言語

/ /

配点 : 100 点

問題文

ルルは実は天才魔法使いである.ルルは長い研究の末,魔法陣を活用した自分だけの秘伝の魔法を開発した.

ルルが扱う魔法陣は,N 個の魔法と N-1 個の接続関係からなる木構造である.各魔法には 1 から N まで順に番号が付いており,ルルはそれらを強化できる.魔法陣の i 番目の接続関係は,魔法 a_i と魔法 b_i が互いに直接つながっていることを意味する.

最初,すべての魔法の威力は 0 である.ルルが魔法 r を w だけ強化すると,r の威力 W_r が w だけ増加する.

ルルは魔法陣の 2 つの魔法 u と v を選んで魔法を詠唱できる.ルルが魔法を詠唱すると,魔法陣にあるすべての魔法が,u と v を結ぶ唯一の単純パス上にある頂点の集合 P(u,v) と相互作用する.ルルが詠唱した魔法の最終威力は次の式で計算できる.ここで,d(a,b) は a と b を結ぶ唯一の単純パス上にある辺の本数である.

\sum_{x \in P(u, v)} \sum_{r=1}^{N} W_r \times d(r, x)

天才魔法使いルルは,次の 2 種類の行動を順に Q 回行いながら,魔法を身につけようとしている.

  • 1 v w: 魔法 v の威力を w だけ増加させる.

  • 2 u v: 魔法 u と魔法 v を選んで魔法を詠唱する.

タイプ 2 の行動を行うたびに,詠唱した魔法の最終威力を 998\,244\,353 で割った余りを計算しよう.

制約

  • 1 \leq N, Q \leq 200\,000
  • 1 \leq a_i, b_i \leq N
  • a_i \ne b_i
  • 与えられる魔法陣は木構造である.
  • 1 v w の形式の行動では,1 \leq v \leq N かつ 1 \leq w \leq 10^9 である.
  • 2 u v の形式の行動では,1 \leq u, v \leq N である.
  • 入力される数値はすべて整数である.

入力

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

N Q
a_1 b_1
a_2 b_2
\vdots
a_{N-1} b_{N-1}
\mathrm{action}_1
\mathrm{action}_2
\vdots
\mathrm{action}_Q

出力

タイプ 2 の行動を行うたびに,詠唱した魔法の最終威力を 998\,244\,353 で割った余りを 1 行に出力せよ.


入力例 1

4 3
1 2
2 3
3 4
1 2 5
1 4 3
2 1 4

出力例 1

38