結果
問題 | 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)