結果

問題 No.2677 Minmax Independent Set
ユーザー ゼットゼット
提出日時 2024-03-15 23:19:40
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 1,724 ms / 2,000 ms
コード長 1,608 bytes
コンパイル時間 135 ms
コンパイル使用メモリ 82,840 KB
実行使用メモリ 257,800 KB
最終ジャッジ日時 2024-09-30 02:55:04
合計ジャッジ時間 51,606 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 61
権限があれば一括ダウンロードができます

ソースコード

diff #

N=int(input())
G=[[] for i in range(N)]
from collections import deque
for i in range(N-1):
  a,b=map(int,input().split())
  G[a-1].append(b-1)
  G[b-1].append(a-1)
dp1=[[] for i in range(N)]
dp2=[[] for i in range(N)]
c=[[0]*2 for i in range(N)]
dist=[-1]*N
dist[0]=0
S=deque()
S.append(0)
while S:
  x=S.pop()
  for y in G[x]:
    if dist[y]>=0:
      continue
    dist[y]=dist[x]+1
    S.append(y)
L=[]
for i in range(N):
  L.append((dist[i],i))
L.sort(reverse=True)
for i in range(N):
  x=L[i][1]
  k1=0
  k2=1
  u1=[0]*(len(G[x]))
  u2=[0]*(len(G[x]))
  for j in range(len(G[x])):
    y=G[x][j]
    if dist[y]<dist[x]:
      continue
    u1[j]=c[y][0]
    u2[j]=max(c[y])
    k1+=u2[j]
    k2+=u1[j]
  dp1[x]=u1[:]
  dp2[x]=u2[:]
  c[x][0]=k1
  c[x][1]=k2
S=deque()
S.append(0)
T=[{} for i in range(N)]
for i in range(N):
  for j in range(len(G[i])):
    T[i][G[i][j]]=j
while S:
  x=S.pop()
  l1=[0]*(len(G[x]))
  r1=[0]*(len(G[x]))
  l2=[0]*(len(G[x]))
  r2=[0]*(len(G[x]))
  for j in range(len(G[x])):
    l1[j]=dp1[x][j]
    l2[j]=dp2[x][j]
    r1[j]=dp1[x][j]
    r2[j]=dp2[x][j]
  for j in range(1,len(G[x])):
    l1[j]+=l1[j-1]
    l2[j]+=l2[j-1]
  for j in range(len(G[x])-2,-1,-1):
    r1[j]+=r1[j+1]
    r2[j]+=r2[j+1]
  for j in range(len(G[x])):
    y=G[x][j]
    if dist[y]<dist[x]:
      continue
    w1=0
    w2=1
    if j>0:
      w1+=l2[j-1]
      w2+=l1[j-1]
    if j<len(G[x])-1:
      w1+=r2[j+1]
      w2+=r1[j+1]
    pos=T[y][x]
    dp1[y][pos]=w1
    dp2[y][pos]=max(w2,w1)
    S.append(y)
result=10**10
for i in range(N):
  ans=sum(dp1[i])+1
  result=min(result,ans)
print(result)
0