結果
| 問題 |
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 |
ソースコード
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)
ゼット