結果
問題 |
No.1640 簡単な色塗り
|
ユーザー |
![]() |
提出日時 | 2021-08-06 21:33:04 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,572 bytes |
コンパイル時間 | 182 ms |
コンパイル使用メモリ | 82,248 KB |
実行使用メモリ | 640,864 KB |
最終ジャッジ日時 | 2024-06-29 14:52:09 |
合計ジャッジ時間 | 57,798 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 39 TLE * 6 MLE * 1 -- * 7 |
ソースコード
import sys input=sys.stdin.buffer.readline N=int(input()) X=[list(map(int,input().split())) for i in range(N)] for i in range(N): for j in range(2): X[i][j]-=1 Q=[[] for i in range(N)] for i in range(N): for j in range(2): Q[X[i][j]].append(j*N+i) G=[[] for i in range(N*6)] v,w=0,0 for i in range(N): w+=len(Q[i]) for j in range(len(Q[i])): if j: G[(N+Q[i][j])%(2*N)].append(2*N+(v+j-1)*2) if j+1!=len(Q[i]): G[(N+Q[i][j])%(2*N)].append(2*N+(v+j+1)*2+1) G[2*N+(v+j)*2].append(Q[i][j]) G[2*N+(v+j)*2+1].append(Q[i][j]) for j in range(v,w): if j!=v: G[2*N+j*2].append(2*N+(j-1)*2) if j+1!=w: G[2*N+j*2+1].append(2*N+(j+1)*2+1) v=w sys.setrecursionlimit(10**7) def SCC(G): D=[] C=[len(G)-1] U=[1]*len(G) def DFS(x): if U[x]: U[x]=0 for i in range(len(G[x])): DFS(G[x][i]) D.append(x) for i in range(len(G)): if U[i]: DFS(i) GR=[[] for i in range(len(G))] for i in range(len(G)): for j in range(len(G[i])): GR[G[i][j]].append(i) R=[] U=[1]*len(G) def DFSR(x): if U[x]: R[-1].append(x) U[x]=0 for i in range(len(GR[x])): DFSR(GR[x][i]) for i in range(len(G)-1,-1,-1): if U[D[i]]: R.append([]) DFSR(D[i]) return R C=[0]*len(G) G=SCC(G) for i in range(len(G)): for j in range(len(G[i])): C[G[i][j]]=i ANS=[0]*N for i in range(N): if C[i]==C[i+N]: print('No') exit() if C[i]<C[i+N]: ANS[i]=X[i][0]+1 else: ANS[i]=X[i][1]+1 print('Yes') print(*ANS,sep='\n')