結果
| 問題 | No.762 PDCAパス |
| コンテスト | |
| ユーザー |
koheijkt
|
| 提出日時 | 2026-06-01 21:59:50 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 401 ms / 2,000 ms |
| コード長 | 1,049 bytes |
| 記録 | |
| コンパイル時間 | 308 ms |
| コンパイル使用メモリ | 84,992 KB |
| 実行使用メモリ | 118,692 KB |
| 最終ジャッジ日時 | 2026-06-01 21:59:59 |
| 合計ジャッジ時間 | 8,623 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
| 純コード判定待ち |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 38 |
ソースコード
import sys
sys.set_int_max_str_digits(0)
MOD = 10**9+7
d = {}
d['P'] = 0
d['D'] = 1
d['C'] = 2
d['A'] = 3
N, M = map(int, input().split())
S = input()
G = [[list() for _ in range(4)] for _ in range(N)]
UV = []
for i in range(M):
u, v = map(int, input().split())
u -= 1
v -= 1
UV.append((u, v))
# 種類
uu = d[S[u]]
vv = d[S[v]]
# 頂点uから
G[u][vv].append(v)
# 頂点vから
G[v][uu].append(u)
ans = 0
for u, v in UV:
# P - D - C - A
# DC な辺に注目する
# D側の頂点から P頂点に何個いけるか?
uu = d[S[u]]
vv = d[S[v]]
if uu == 1 and vv == 2:
sub = 1
# 頂点u から P頂点に何個行けるか?
sub *= len(G[u][0])
# 頂点v から A頂点に何個行けるか?
sub *= len(G[v][3])
ans = (ans + sub)%MOD
elif uu == 2 and vv == 1:
sub = 1
# u --> A
sub *= len(G[u][3])
# v --> P
sub *= len(G[v][0])
ans = (ans + sub)%MOD
print(ans%MOD)
koheijkt