init
This commit is contained in:
commit
851751ea87
82 changed files with 2093 additions and 0 deletions
68
1M.py
Normal file
68
1M.py
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
import sys
|
||||
|
||||
data = sys.stdin.read().split()
|
||||
if not data:
|
||||
exit()
|
||||
n = int(data[0])
|
||||
m = int(data[1])
|
||||
k = int(data[2])
|
||||
a = [0] * (n + 1)
|
||||
max_val = 0
|
||||
for i in range(1, n + 1):
|
||||
a[i] = int(data[2 + i])
|
||||
if a[i] > max_val:
|
||||
max_val = a[i]
|
||||
adj = [[] for _ in range(n + 1)]
|
||||
idx = 3 + n
|
||||
for _ in range(m):
|
||||
u = int(data[idx])
|
||||
v = int(data[idx+1])
|
||||
adj[u].append(v)
|
||||
idx += 2
|
||||
l = 1
|
||||
r = max_val
|
||||
ans = -1
|
||||
while l <= r:
|
||||
mid = (l + r) // 2
|
||||
in_degree = [0] * (n + 1)
|
||||
valid_count = 0
|
||||
for u in range(1, n + 1):
|
||||
if a[u] <= mid:
|
||||
valid_count += 1
|
||||
for v in adj[u]:
|
||||
if a[v] <= mid:
|
||||
in_degree[v] += 1
|
||||
q = []
|
||||
dp = [0] * (n + 1)
|
||||
possible = False
|
||||
for i in range(1, n + 1):
|
||||
if a[i] <= mid:
|
||||
dp[i] = 1
|
||||
if dp[i] >= k:
|
||||
possible = True
|
||||
if in_degree[i] == 0:
|
||||
q.append(i)
|
||||
head = 0
|
||||
visited_count = 0
|
||||
while head < len(q) and not possible:
|
||||
u = q[head]
|
||||
head += 1
|
||||
visited_count += 1
|
||||
for v in adj[u]:
|
||||
if a[v] <= mid:
|
||||
if dp[u] + 1 > dp[v]:
|
||||
dp[v] = dp[u] + 1
|
||||
if dp[v] >= k:
|
||||
possible = True
|
||||
break
|
||||
in_degree[v] -= 1
|
||||
if in_degree[v] == 0:
|
||||
q.append(v)
|
||||
if visited_count < valid_count:
|
||||
possible = True
|
||||
if possible:
|
||||
ans = mid
|
||||
r = mid - 1
|
||||
else:
|
||||
l = mid + 1
|
||||
print(ans)
|
||||
Loading…
Add table
Add a link
Reference in a new issue