結果
問題 |
No.1340 おーじ君をさがせ
|
ユーザー |
![]() |
提出日時 | 2025-04-15 21:50:45 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 167 ms / 2,000 ms |
コード長 | 1,764 bytes |
コンパイル時間 | 482 ms |
コンパイル使用メモリ | 82,092 KB |
実行使用メモリ | 78,076 KB |
最終ジャッジ日時 | 2025-04-15 21:52:42 |
合計ジャッジ時間 | 6,350 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 59 |
ソースコード
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)] out_degree = [0] * n for _ in range(m): a = int(input[idx]); idx +=1 b = int(input[idx]); idx +=1 edges[a].append(b) out_degree[a] += 1 # Construct the adjacency matrix with bitmask mask = [0] * n for u in range(n): if out_degree[u] == 0: mask[u] = 0 else: for v in edges[u]: mask[u] |= 1 << v if t == 0: print(1) return def multiply(A, B): n = len(A) # Compute transpose of B as bitmask for each column BT = [0] * n for j in range(n): bt = 0 for k in range(n): if (B[k] >> j) & 1: bt |= 1 << k BT[j] = bt # Compute product matrix C C = [0] * n for i in range(n): ci = 0 for j in range(n): if (A[i] & BT[j]) != 0: ci |= 1 << j C[i] = ci return C def matrix_power(mat, power): n = len(mat) # Initialize result as identity matrix result = [0] * n for i in range(n): result[i] = 1 << i # Each row has only the i-th bit set while power > 0: if power % 2 == 1: result = multiply(result, mat) mat = multiply(mat, mat) power = power // 2 return result mat_pow = matrix_power(mask, t) row0 = mat_pow[0] count = bin(row0).count('1') print(count) if __name__ == '__main__': main()