前提・実現したいこと
Pythonで下記の問題を解いておりましたが、どうしてもある入力に対して間違いを出力します
(9つの入力例に対して不正解)
どこのロジックが間違っているか、ご教示いただけますでしょうか
問題文リンク
基本的な考え方は、union-findで友人グループを作り、そのうち最大人数を持つグループの人数を出力する、という考えです
該当のソースコード
python
1def main(): 2 n, m = map(int, input().split()) 3 par = [i for i in range(n+1)] 4 rank = [0] * (n+1) 5 6 def find(x): 7 if par[x] == x: 8 return x 9 else: 10 par[x] = find(par[x]) 11 return par[x] 12 13 def unite(x,y): 14 x = find(x) 15 y = find(y) 16 17 if x == y: 18 return 0 19 if rank[x] < rank[y]: 20 par[x] = y 21 else: 22 par[y] = x 23 if rank[x] == rank[y]: 24 rank[x] += 1 25 26 for _ in range(m): 27 a, b = map(int, input().split()) 28 unite(a,b) 29 30 indic = {} 31 for num in par: 32 if num not in indic: 33 indic[num] = 1 34 else: 35 indic[num] += 1 36 37 print(max(indic.values())) 38 39 40if __name__ == "__main__": 41 main() 42
試したこと
いくつか思いつくコーナーケースを入力する等してみましたが、ちょっと問題が思い当たりません
恐れ入りますが、ご指摘いただければ幸いです
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/28 00:29