結果
問題 | No.2531 Coloring Vertices on Namori |
ユーザー |
![]() |
提出日時 | 2024-11-14 22:17:31 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 799 ms / 2,000 ms |
コード長 | 1,991 bytes |
コンパイル時間 | 394 ms |
コンパイル使用メモリ | 82,428 KB |
実行使用メモリ | 237,852 KB |
最終ジャッジ日時 | 2024-11-14 22:17:57 |
合計ジャッジ時間 | 17,564 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 31 |
ソースコード
from types import GeneratorTypefrom collections import dequedef bootstrap(f, stack=[]):def wrappedfunc(*args, **kwargs):if stack:return f(*args, **kwargs)to = f(*args, **kwargs)while True:if type(to) is GeneratorType:stack.append(to)to = next(to)else:stack.pop()if not stack:breakto = stack[-1].send(to)return toreturn wrappedfuncN, K = map(int, input().split())G = [[] for _ in range(N)]for _ in range(N):u, v = map(int, input().split())G[u-1].append(v-1)G[v-1].append(u-1)MOD = 998244353@bootstrapdef dfs(n, pre):visited[n] = Truestack.append(n)for v in G[n]:if not visited[v]:yield dfs(v, n)elif v != pre and not finished[v]:for s in stack:cycle.append(s)cycle.append(v)finished[n] = Truestack.pop()yieldstack = []cycle = []visited = [False]*Nfinished = [False]*Ndfs(0, -1)c = cycle.pop()cycle = cycle[::-1]while cycle[-1] != c:cycle.pop()dp = [[0]*2 for _ in range(len(cycle))]dp[0][0] = 1for i in range(len(cycle)-1):dp[i+1][1] += dp[i][0]*(K-1)dp[i+1][1] %= MODdp[i+1][0] += dp[i][1]dp[i+1][0] %= MODdp[i+1][1] += dp[i][1]*(K-2)dp[i+1][1] %= MODans = dp[-1][1]*K%MODS = set(cycle)visited = [False]*Nfor c in cycle:visited[c] = Truefor c in cycle:for v in G[c]:if v not in S:que = deque()que.append(v)visited[v] = Truecnt = 1while que:n = que.popleft()for v in G[n]:if not visited[v]:visited[v] = Trueque.append(v)cnt += 1ans *= pow(K-1, cnt, MOD)ans %= MODprint(ans)