質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

915閲覧

atcoder ABC177_D pythonでREが発生してしまう

pawapoke

総合スコア3

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/02 12:33

編集2021/07/02 23:25

前提・実現したいこと

表題についてpythonで下記の問題のコードを提出したところ、いくつかREが出てしまいました。
どこのロジックが問題なのか全く分からず、途方に暮れています。
どなたかご教授頂けますでしょうか?

対象の問題のURL

方針:UnionFindを用いて、連結関係を作成⇒Counterを用いて、連結関係の中で最も最大のものを抽出

発生している問題・エラーメッセージ

5つのパターンでREが発生してます

エラーメッセージ

該当のソースコード

python

1from collections import Counter 2 3N,M = map(int,input().split()) 4par = [i for i in range(N+1)] 5 6def find(x): 7 if par[x] == x: 8 return x 9 else: 10 par[x] = find(par[x]) 11 return par[x] 12 13def same(x,y): 14 return find(x) == find(y) 15 16def unite(x,y): 17 x = find(x) 18 y = find(y) 19 if x == y: 20 return 0 21 par[x] = y 22 23for _ in range(M): 24 A,B = map(int,input().split()) 25 if not same(A,B): 26 unite(A,B) 27 28for i in range(1,N+1): 29 find(i) 30 31S = Counter(par) 32answer = max(S.values()) 33 34print(answer) 35

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

actorbug

2021/07/02 22:02

ABC177にはA-Fの6問ありますが、どれのことでしょうか。 質問を編集して、問題のURLを載せてください。
pawapoke

2021/07/02 23:27

対象の問題のURLを追加しました。 ご指摘本当にありがとうございます。
guest

回答1

0

ベストアンサー

以下のような入力を与えれば、ローカルでREが再現できると思います。

text

1200000 199999 21 2 32 3 43 4 5..... 6199998 199999 7199999 200000

Pythonは再帰呼び出し回数に上限があります。
上記データでfind(1)の再帰呼び出しが何回になるか数えてみてください。

投稿2021/07/02 23:41

actorbug

総合スコア2231

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pawapoke

2021/07/03 00:13

この場合だと再起呼び出しは199998回になりますね。。 pythonは再帰呼び出し回数にdefaultで制限があるのですね。 ひとまず、方針を二つ考えました。 ①再帰呼び出し回数の上限を更新する ②クエリの処理のタイミングで、木が深くならないような処理を作る UnionFindについて理解が浅いと思うので、②の方についてもう少し考えてみようと思います。 actorbugさん、ご回答ありがとうございました。
pawapoke

2021/07/03 02:58

無事、AC通すことが出来ました。 木が深くならないよる考え方があるのですね。勉強になりました。 改めてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問