結果
| 問題 |
No.1773 Love Triangle
|
| コンテスト | |
| ユーザー |
hitonanode
|
| 提出日時 | 2021-10-13 23:43:21 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 647 ms / 2,000 ms |
| コード長 | 1,462 bytes |
| コンパイル時間 | 142 ms |
| コンパイル使用メモリ | 82,636 KB |
| 実行使用メモリ | 81,800 KB |
| 最終ジャッジ日時 | 2024-07-03 21:05:19 |
| 合計ジャッジ時間 | 35,548 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 90 |
ソースコード
#!/usr/bin/env python3
import random
random.seed(530629)
md = (1 << 30) + 3 # prime
def modinv(a: int) -> int:
x = a
for _ in range(30):
x = x * x % md
return x * a % md
def rank_of_matrix(mat):
n = len(mat)
rank = 0
for i in range(n):
ti = i
while ti < n and mat[ti][i] == 0:
ti += 1
if ti == n:
continue
rank += 1
mat[i], mat[ti] = mat[ti], mat[i]
mati = mat[i]
inv = modinv(mati[i])
for j in range(i + 1, n):
mati[j] = mati[j] * inv % md
for h in range(n):
if i == h:
continue
math = mat[h]
c = md - math[i]
for j in range(i + 1, n):
math[j] = (math[j] + mati[j] * c) % md
return rank
N, M = map(int, input().split())
uvws = [tuple(map(int, input().split())) for _ in range(M)]
def solve() -> int:
mat = [[0] * N for _ in range(N)]
for u, v, w in uvws:
x = random.randrange(0, md)
mat[u - 1][v - 1] = (mat[u - 1][v - 1] + x) % md
mat[v - 1][w - 1] = (mat[v - 1][w - 1] + x) % md
mat[w - 1][u - 1] = (mat[w - 1][u - 1] + x) % md
mat[v - 1][u - 1] = (mat[v - 1][u - 1] + md - x) % md
mat[w - 1][v - 1] = (mat[w - 1][v - 1] + md - x) % md
mat[u - 1][w - 1] = (mat[u - 1][w - 1] + md - x) % md
return rank_of_matrix(mat) // 2
print(max(solve(), solve()))
hitonanode