結果
| 問題 | No.3756 Udon Network |
| ユーザー |
👑 |
| 提出日時 | 2026-09-11 16:46:34 |
| 言語 | PyPy3 (7.3.23 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 1,078 ms / 2,000 ms |
| + 869µs | |
| コード長 | 1,867 bytes |
| 記録 | |
| コンパイル時間 | 63 ms |
| コンパイル使用メモリ | 81,936 KB |
| 実行使用メモリ | 265,736 KB |
| 最終ジャッジ日時 | 2026-10-09 17:37:52 |
| 合計ジャッジ時間 | 37,540 ms |
|
ジャッジサーバーID (参考情報) |
judge4_0 / judge5_0 |
| 純コード判定待ち |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| Example | 0 % | AC * 8 |
| Subtask $1$ | 2 % | AC * 15 |
| Subtask $2$ | 4 % | AC * 22 |
| Subtask $3$ | 8 % | AC * 9 |
| Subtask $4$ | 16 % | AC * 10 |
| Subtask $5$ | 32 % | AC * 10 |
| Subtask $6$ | 38 % | AC * 53 |
| 合計 | 4 * 100% = 400 点 |
ソースコード
import sys
input = sys.stdin.readline
class DSU:
def __init__(self, n):
self.p = [-1] * n
def leader(self, x):
while self.p[x] >= 0:
if self.p[self.p[x]] >= 0:
self.p[x] = self.p[self.p[x]]
x = self.p[x]
return x
def merge(self, a, b):
a = self.leader(a)
b = self.leader(b)
if a == b:
return a
if -self.p[a] < -self.p[b]:
a, b = b, a
self.p[a] += self.p[b]
self.p[b] = a
return a
n, m, q = map(int, input().split())
a = list(map(int, input().split()))
g = []
for _ in range(m):
u, v, w = map(int, input().split())
g.append((w, u - 1, v - 1))
g.sort()
p = [-1] * (2 * n)
cnt = [1] * (2 * n)
root = list(range(n))
w = [0] * (2 * n)
d = [{a[i]} for i in range(n)]
dsu = DSU(n)
k = n
for cost, u, v in g:
u = dsu.leader(u)
v = dsu.leader(v)
if u == v:
continue
x = root[u]
y = root[v]
p[x] = k
p[y] = k
w[k] = cost
if len(d[u]) > len(d[v]):
u, v = v, u
d[v].update(d[u])
d[u].clear()
r = dsu.merge(u, v)
if r == u:
d[u], d[v] = d[v], d[u]
root[r] = k
cnt[k] = len(d[r])
k += 1
rt = [0] * n
for i in range(n):
rt[i] = root[dsu.leader(i)]
LOG = k.bit_length()
up = [[-1] * k for _ in range(LOG)]
for i in range(k):
up[0][i] = p[i]
for j in range(1, LOG):
prev = up[j - 1]
cur = up[j]
for i in range(k):
x = prev[i]
if x != -1:
cur[i] = prev[x]
ans = []
for _ in range(q):
s, c = map(int, input().split())
s -= 1
if cnt[rt[s]] < c:
print(-1)
continue
if c <= 1:
print(0)
continue
x = s
for j in range(LOG - 1, -1, -1):
y = up[j][x]
if y != -1 and cnt[y] < c:
x = y
print(w[p[x]])