結果
| 問題 |
No.1340 おーじ君をさがせ
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 23:25:20 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 127 ms / 2,000 ms |
| コード長 | 1,664 bytes |
| コンパイル時間 | 463 ms |
| コンパイル使用メモリ | 82,532 KB |
| 実行使用メモリ | 77,088 KB |
| 最終ジャッジ日時 | 2025-04-15 23:26:44 |
| 合計ジャッジ時間 | 5,629 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / 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)]
for _ in range(M):
a = int(input[idx]); idx +=1
b = int(input[idx]); idx +=1
edges[a].append(b)
dead_end = [len(e) == 0 for e in edges]
if T == 0:
print(1)
return
if dead_end[0]:
print(0)
return
# Build modified adjacency matrix as bitmask rows
modified_adj = [0] * N
for a in range(N):
if not dead_end[a]:
mask = 0
for b in edges[a]:
mask |= 1 << b
modified_adj[a] = mask
def multiply(a, b):
res = [0] * N
for i in range(N):
row = a[i]
temp = 0
k = 0
while row:
if row & 1:
temp |= b[k]
row >>= 1
k += 1
res[i] = temp
return res
def matrix_power(mat, power):
# Initialize result as identity matrix
result = [0] * N
for i in range(N):
result[i] = 1 << i # Identity matrix: each node can reach itself in 0 steps
current = mat.copy()
while power > 0:
if power % 2 == 1:
result = multiply(result, current)
current = multiply(current, current)
power = power // 2
return result
mat_power = matrix_power(modified_adj, T)
print(bin(mat_power[0]).count('1'))
if __name__ == '__main__':
main()
lam6er