結果
問題 | No.1340 おーじ君をさがせ |
ユーザー |
|
提出日時 | 2021-01-15 22:08:20 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,458 bytes |
コンパイル時間 | 415 ms |
コンパイル使用メモリ | 82,116 KB |
実行使用メモリ | 80,792 KB |
最終ジャッジ日時 | 2024-11-26 19:43:45 |
合計ジャッジ時間 | 14,794 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 58 WA * 1 |
ソースコード
import sys input = lambda : sys.stdin.readline().rstrip() sys.setrecursionlimit(2*10**5+10) write = lambda x: sys.stdout.write(x+"\n") _print = lambda *x: print(*x, file=sys.stderr) ### 行列積 matrix multiplication ### 繰り返し2乗法 kurikae M = 10**9+7 def mul(a,b): """行列a,bの積 aかbがNone のとき、単位行列として扱う """ if a is None: return b elif b is None: return a n,m = len(a), len(a[0]) k,l = len(b), len(b[0]) # k==m out = [[0]*l for _ in range(n)] for i in range(n): for j in range(l): for p in range(m): out[i][j] |= (a[i][p]&b[p][j]) return out def mulk(m, k): """a^kを求める """ if k==0: return m ans = None tmp = m while k>0: if k&1: ans = mul(ans, tmp) tmp = mul(tmp, tmp) k = k>>1 return ans def mul2(m,a): """行列と配列の積 """ k,l = len(m), len(m[0]) # ll = len(a) ans = [0]*k for i in range(k): for j in range(l): ans[i] |= (m[i][j] & a[j]) return ans n,m,t = list(map(int, input().split())) val = [[0]*n for _ in range(n)] for i in range(m): a,b = map(int, input().split()) val[a][b] = 1 valt = mulk(val,t) b = [0]*n b[0] = 1 valtt = [[0]*n for _ in range(n)] for i in range(n): for j in range(n): valtt[i][j] = valt[j][i] ans = mul2(valtt,b) print(sum(ans))