結果
問題 |
No.3079 Unite Japanese Prefectures
|
ユーザー |
![]() |
提出日時 | 2025-03-28 22:20:44 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,287 bytes |
コンパイル時間 | 382 ms |
コンパイル使用メモリ | 82,380 KB |
実行使用メモリ | 77,376 KB |
最終ジャッジ日時 | 2025-03-28 22:20:47 |
合計ジャッジ時間 | 3,371 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 10 WA * 17 |
ソースコード
class unif: def __init__(self,n): self.pare=[-1]*n self.size=[1]*n def root(self,x): while self.pare[x]!=-1: x=self.pare[x] return x def unite(self,u,v): rootu=self.root(u) rootv=self.root(v) if rootu!=rootv: if self.size[rootu]>=self.size[rootv]: self.pare[rootv]=rootu self.size[rootu]+=self.size[rootv] else: self.pare[rootu]=rootv self.size[rootv]+=self.size[rootu] def same(self,s,t): return self.root(s)==self.root(t) N,M=map(int,input().split()) u=[0]*7 L=[] Z=unif(N) for i in range(M): a,b,c=map(int,input().split()) L.append((c,a-1,b-1)) L.sort() for i in range(M): c,a,b=L[i][:] if Z.same(a,b)==False: u[c]+=1 Z.unite(a,b) R=[] for k in range(1,7): for i in range((u[k])): R.append(k) K=len(R) dp=[[0]*K for i in range(K)] if K!=N-1: p=[1] print(p[1]) for l in range(K-1,-1,-1): for r in range(l,K): w=1 t=0 for x in range(1,7): ans=False for i in range(r,l-1,-1): if R[i]<=x: score=0 if i<r: score+=dp[i+1][r] if i>l: score+=dp[l][i-1] w+=score/6 ans=True break if ans==False: t+=1/6 w/=1-t dp[l][r]=w print(dp[0][K-1])