結果
問題 | No.241 出席番号(1) |
ユーザー | burita083 |
提出日時 | 2021-06-17 01:59:33 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,486 bytes |
コンパイル時間 | 170 ms |
コンパイル使用メモリ | 82,240 KB |
実行使用メモリ | 157,404 KB |
最終ジャッジ日時 | 2024-06-10 08:47:54 |
合計ジャッジ時間 | 13,687 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 60 ms
73,704 KB |
testcase_01 | AC | 61 ms
67,080 KB |
testcase_02 | AC | 63 ms
69,036 KB |
testcase_03 | AC | 65 ms
68,352 KB |
testcase_04 | AC | 62 ms
68,320 KB |
testcase_05 | AC | 60 ms
66,944 KB |
testcase_06 | AC | 61 ms
67,084 KB |
testcase_07 | AC | 61 ms
67,188 KB |
testcase_08 | AC | 61 ms
67,628 KB |
testcase_09 | AC | 62 ms
67,204 KB |
testcase_10 | AC | 60 ms
67,056 KB |
testcase_11 | WA | - |
testcase_12 | AC | 65 ms
67,788 KB |
testcase_13 | AC | 62 ms
67,472 KB |
testcase_14 | AC | 66 ms
71,704 KB |
testcase_15 | AC | 63 ms
68,896 KB |
testcase_16 | AC | 58 ms
76,588 KB |
testcase_17 | AC | 61 ms
66,872 KB |
testcase_18 | AC | 62 ms
67,480 KB |
testcase_19 | AC | 62 ms
67,940 KB |
testcase_20 | AC | 60 ms
66,820 KB |
testcase_21 | AC | 61 ms
66,960 KB |
testcase_22 | TLE | - |
testcase_23 | AC | 64 ms
69,396 KB |
testcase_24 | TLE | - |
testcase_25 | -- | - |
testcase_26 | -- | - |
testcase_27 | -- | - |
testcase_28 | -- | - |
testcase_29 | -- | - |
testcase_30 | -- | - |
testcase_31 | -- | - |
ソースコード
# 最大流問題 from collections import deque INF = float("inf") TO = 0; CAP = 1; REV = 2 class Dinic: def __init__(self, N): self.N = N self.V = [[] for _ in range(N)] # to, cap, rev # 辺 e = V[n][m] の逆辺は V[e[TO]][e[REV]] self.level = [0] * N def add_edge(self, u, v, cap): self.V[u].append([v, cap, len(self.V[v])]) self.V[v].append([u, 0, len(self.V[u])-1]) def add_edge_undirected(self, u, v, cap): # 未検証 self.V[u].append([v, cap, len(self.V[v])]) self.V[v].append([u, cap, len(self.V[u])-1]) def bfs(self, s: int) -> bool: self.level = [-1] * self.N self.level[s] = 0 q = deque() q.append(s) while len(q) != 0: v = q.popleft() for e in self.V[v]: if e[CAP] > 0 and self.level[e[TO]] == -1: # capが1以上で未探索の辺 self.level[e[TO]] = self.level[v] + 1 q.append(e[TO]) return True if self.level[self.g] != -1 else False # 到達可能 def dfs(self, v: int, f) -> int: if v == self.g: return f for i in range(self.ite[v], len(self.V[v])): self.ite[v] = i e = self.V[v][i] if e[CAP] > 0 and self.level[v] < self.level[e[TO]]: d = self.dfs(e[TO], min(f, e[CAP])) if d > 0: # 増加路 e[CAP] -= d # cap を減らす self.V[e[TO]][e[REV]][CAP] += d # 反対方向の cap を増やす return d return 0 def solve(self, s, g): self.g = g flow = 0 while self.bfs(s): # 到達可能な間 self.ite = [0] * self.N f = self.dfs(s, INF) while f > 0: flow += f f = self.dfs(s, INF) return flow N = int(input()) A = [] for i in range(N): A.append(int(input())) dp = [set() for i in range(N)] for i, x in enumerate(A): for j in range(N): if j != x: dp[i].add(j) ans = -float('inf') import random l = [] for i in range(500000): st = set() temp = 0 for d in dp: d -= st while True: if len(d) == 0: break item = random.sample(d, 1) if not item[0] in st: st.add(item[0]) l.append(item[0]) temp += 1 break if temp == N: break if len(l) < N: print(-1) exit() for d in l: print(d)