結果
| 問題 |
No.241 出席番号(1)
|
| コンテスト | |
| ユーザー |
burita083
|
| 提出日時 | 2021-06-17 01:56:29 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 2,450 bytes |
| コンパイル時間 | 267 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 11,648 KB |
| 最終ジャッジ日時 | 2024-12-31 23:18:28 |
| 合計ジャッジ時間 | 6,461 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | RE * 3 |
| other | WA * 1 RE * 28 |
ソースコード
# 最大流問題
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(100000):
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
for d in l:
print(d)
burita083