結果
| 問題 | No.3639 Itsukin |
| コンテスト | |
| ユーザー |
kidodesu
|
| 提出日時 | 2026-09-02 21:39:09 |
| 言語 | PyPy3 (7.3.23 + ACL) |
| 結果 |
TLE
不安定
|
| 実行時間 | - |
| コード長 | 2,184 bytes |
| 記録 | |
| コンパイル時間 | 369 ms |
| コンパイル使用メモリ | 96,080 KB |
| 実行使用メモリ | 194,424 KB |
| 最終ジャッジ日時 | 2026-09-02 21:40:01 |
| 合計ジャッジ時間 | 38,164 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge1_0 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| サンプル | 0 % | AC * 1 |
| 小課題1 | 10 % | AC * 6 |
| 小課題2 | 15 % | AC * 5 |
| 小課題3 | 15 % | AC * 16 |
| 小課題4 | 20 % | AC * 10 |
| 小課題5 | 10 % | AC * 15 |
| 小課題6 | 30 % | AC * 32 TLE * 3 |
| 合計 | 70 点 |
ソースコード
class dsu:
n = 1
parent_or_size = [-1 for i in range(n)]
def __init__(self, N):
self.n = N
self.parent_or_size = [-1 for i in range(N)]
def merge(self, a, b):
assert 0 <= a < self.n, "0<=a<n,a={0},n={1}".format(a, self.n)
assert 0 <= b < self.n, "0<=b<n,b={0},n={1}".format(b, self.n)
x = self.leader(a)
y = self.leader(b)
if x == y:
return x
if -self.parent_or_size[x] < -self.parent_or_size[y]:
x, y = y, x
self.parent_or_size[x] += self.parent_or_size[y]
self.parent_or_size[y] = x
return x
def same(self, a, b):
assert 0 <= a < self.n, "0<=a<n,a={0},n={1}".format(a, self.n)
assert 0 <= b < self.n, "0<=b<n,b={0},n={1}".format(b, self.n)
return self.leader(a) == self.leader(b)
def leader(self, a):
assert 0 <= a < self.n, "0<=a<n,a={0},n={1}".format(a, self.n)
if self.parent_or_size[a] < 0:
return a
self.parent_or_size[a] = self.leader(self.parent_or_size[a])
return self.parent_or_size[a]
def size(self, a):
assert 0 <= a < self.n, "0<=a<n,a={0},n={1}".format(a, self.n)
return -self.parent_or_size[self.leader(a)]
def groups(self):
leader_buf = [0 for i in range(self.n)]
group_size = [0 for i in range(self.n)]
for i in range(self.n):
leader_buf[i] = self.leader(i)
group_size[leader_buf[i]] += 1
result = [[] for i in range(self.n)]
for i in range(self.n):
result[leader_buf[i]].append(i)
result2 = []
for i in range(self.n):
if len(result[i]) > 0:
result2.append(result[i])
return result2
n, m = list(map(int, input().split()))
E = []
for _ in range(m):
u, v, w = list(map(lambda x: int(x)-1, input().split()))
E.append((w+1, u, v))
q = int(input())
Ans = [-1] * q
for i in range(q):
p, t = list(map(int, input().split()))
E.append((p, n+t-1, i))
E.sort()
uf = dsu(n)
for _, u, v in E:
if u < n:
uf.merge(u, v)
else:
Ans[v] = uf.size(u-n)
for ans in Ans:
print(ans)
kidodesu