結果
| 問題 |
No.3309 Aging Railway
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-10-24 23:08:54 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,343 bytes |
| コンパイル時間 | 428 ms |
| コンパイル使用メモリ | 82,792 KB |
| 実行使用メモリ | 362,324 KB |
| 最終ジャッジ日時 | 2025-10-24 23:09:14 |
| 合計ジャッジ時間 | 20,421 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 4 WA * 16 |
ソースコード
from collections import defaultdict
class UnionFind:
def __init__(self,n):
self._n=n
self._parent_size=[-1 for _ in range(n)]
def leader(self,a):
if self._parent_size[a]<0:return a
self._parent_size[a]=self.leader(self._parent_size[a])
return self._parent_size[a]
def merge(self,a,b):
x,y=self.leader(a),self.leader(b)
if x==y: return
if abs(self._parent_size[x])<abs(self._parent_size[y]):x,y=y,x
self._parent_size[x]+=self._parent_size[y]
self._parent_size[y]=x
return
N,M=map(int,input().split())
UV=[]
for _ in range(N-1):
u,v=map(int,input().split())
u-=1;v-=1
UV.append((u,v))
IS=[]
IT=[]
SI=defaultdict(set)
TI=defaultdict(set)
for i in range(M):
s,t=map(int,input().split())
s-=1;t-=1
IS.append(s)
IT.append(t)
SI[s].add(i)
TI[t].add(i)
uf=UnionFind(N)
ans=[set()]
for u,v in UV[::-1]:
uf.merge(u,v)
# 駅uと駅vが繋がったとき、駅uの利用者iの目的駅wが同じグループなら通勤可能
user=set()
for i in (SI[u]|SI[v]-ans[-1]):
if uf.leader(IS[i])==uf.leader(IT[i]):user.add(i)
for i in (TI[u]|TI[v]-ans[-1]):
if uf.leader(IT[i])==uf.leader(IS[i]):user.add(i)
ans.append(ans[-1]|user)
for a in list(reversed(ans))[1:]:
print(len(a))