Submission #753958

#TimeUsernameProblemLanguageResultExecution timeMemory
753958shubhrajgProgramming Contest (POI11_pro)Cpython 3
40 / 100
1077 ms12064 KiB
from collections import defaultdict n, m, r, t, k = map(int, input().split()) graph = defaultdict(list) matching = [-1] * m degree = [0] * n used = [0] * (n + 1) T = 0 def try_dfs(v, deg): global T if used[v] == T: return False used[v] = T if degree[v] > deg + 1: return True for u in graph[v]: if try_dfs(matching[u], deg): degree[matching[u]] -= 1 matching[u] = v degree[v] += 1 return True return False for _ in range(k): u, v = map(int, input().split()) u -= 1 v -= 1 graph[u].append(v) for u in range(m): if matching[u] == -1: for v in range(n): if u in graph[v] and matching[u] == -1: matching[u] = v degree[v] += 1 updated = True while updated: updated = False ds = [(degree[v], v) for v in range(n)] ds.sort() T += 1 for _, v in ds: if try_dfs(v, degree[v]): updated = True break penalty = 0 res = [] for v in range(n): degree[v] = min(degree[v], t // r) for u in range(m): if matching[u] != -1 and degree[matching[u]]: penalty += degree[matching[u]] * r degree[matching[u]] -= 1 res.append((matching[u] + 1, u + 1, degree[matching[u]] * r)) print(len(res), penalty) for el in res: print(el[0], el[1], el[2])
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...