結果
問題 |
No.1340 おーじ君をさがせ
|
ユーザー |
![]() |
提出日時 | 2025-04-15 21:54:24 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,213 ms / 2,000 ms |
コード長 | 1,412 bytes |
コンパイル時間 | 461 ms |
コンパイル使用メモリ | 81,616 KB |
実行使用メモリ | 80,552 KB |
最終ジャッジ日時 | 2025-04-15 21:56:16 |
合計ジャッジ時間 | 8,116 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 59 |
ソースコード
def multiply(a, b): n = len(a) res = [[False] * n for _ in range(n)] for i in range(n): for k in range(n): if a[i][k]: for j in range(n): if b[k][j]: res[i][j] = True return res def matrix_pow(mat, power): n = len(mat) result = [[False] * n for _ in range(n)] for i in range(n): result[i][i] = True # Identity matrix current = [row[:] for row in mat] while power > 0: if power % 2 == 1: result = multiply(result, current) current = multiply(current, current) power = power // 2 return result def main(): import sys input = sys.stdin.read().split() idx = 0 n = int(input[idx]) idx += 1 m = int(input[idx]) idx += 1 T = int(input[idx]) idx += 1 edges = [[] for _ in range(n)] for _ in range(m): a = int(input[idx]) idx += 1 b = int(input[idx]) idx += 1 edges[a].append(b) out_degree = [len(edges[i]) for i in range(n)] mat = [[False] * n for _ in range(n)] for i in range(n): if out_degree[i] >= 1: for j in edges[i]: mat[i][j] = True if T == 0: print(1) return mt = matrix_pow(mat, T) count = sum(mt[0][j] for j in range(n)) print(count) if __name__ == "__main__": main()