結果
| 問題 |
No.2563 色ごとのグループ
|
| コンテスト | |
| ユーザー |
kinoko_econ
|
| 提出日時 | 2023-12-02 15:27:14 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,351 bytes |
| コンパイル時間 | 249 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 268,544 KB |
| 最終ジャッジ日時 | 2024-09-26 18:42:39 |
| 合計ジャッジ時間 | 8,673 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 TLE * 1 -- * 13 |
ソースコード
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)]
def dfs(v, G, seen):
# 頂点 v を探索済みにする
seen[v] = True
# G[v] に含まれる頂点 v2 について、
for v2 in G[v]:
# v2 がすでに探索済みならば、スキップする
if seen[v2]: continue
# v2 始点で深さ優先探索を行う (関数を再帰させる)
dfs(v2, G, seen)
return
Ans = 0
for i in range(N):
if len(group[i]) <= 1:
continue
seen = [False for _ in range(N)] # seen[v]:頂点 v が探索済みなら true, そうでないなら false
ans = 0 # 答えとなる変数
# 全ての頂点について
for v in range(N):
# 頂点 v がすでに訪問済みであれば、スキップ
if seen[v] or v not in set_group[i]: continue
# そうでなければ、頂点 v を含む連結成分は未探索
# 深さ優先探索で新たに訪問し、答えを 1 増やす
dfs(v, G, seen)
ans += 1
Ans += ans-1
print(Ans)
kinoko_econ