結果
| 問題 |
No.2563 色ごとのグループ
|
| コンテスト | |
| ユーザー |
kinoko_econ
|
| 提出日時 | 2023-12-02 15:35:01 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,506 bytes |
| コンパイル時間 | 520 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 163,952 KB |
| 最終ジャッジ日時 | 2024-09-26 18:55:52 |
| 合計ジャッジ時間 | 8,825 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 30 RE * 5 |
ソースコード
N, M = map(int,input().split())
C = list(map(int,input().split()))
G = [[] for _ in range(N)]
for i in range(M):
u, v = map(int,input().split())
if C[u-1] == C[v-1]:
G[u-1].append(v-1)
G[v-1].append(u-1)
group = [[] for _ in range(N)]
for i in range(N):
group[C[i]-1].append(i)
set_group = [set(group[i]) for i in range(N)]
lst = [0]*N
for i in range(N):
for j in range(len(group[i])):
lst[group[i][j]] = j
def dfs(j, G, seen, i):
# 頂点 v を探索済みにする
seen[lst[group[i][j]]] = True
# G[v] に含まれる頂点 v2 について、
for v2 in G[group[i][j]]:
# v2 がすでに探索済みならば、スキップする
if seen[lst[v2]]: continue
# v2 始点で深さ優先探索を行う (関数を再帰させる)
dfs(lst[v2], G, seen, i)
return
Ans = 0
for i in range(N):
if len(group[i]) <= 1:
continue
seen = [False for _ in range(len(group[i]))] # seen[v]:頂点 v が探索済みなら true, そうでないなら false
ans = 0 # 答えとなる変数
# 全ての頂点について
for j in range(len(group[i])):
# 頂点 v がすでに訪問済みであれば、スキップ
if seen[lst[group[i][j]]] : continue
# そうでなければ、頂点 v を含む連結成分は未探索
# 深さ優先探索で新たに訪問し、答えを 1 増やす
dfs(j, G, seen, i)
ans += 1
Ans += ans-1
print(Ans)
kinoko_econ