🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

1回答

639閲覧

AtCoder ABC138D [Python3] どこが間違っているのかご教授ください

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2019/11/17 04:28

問題はこれです
https://atcoder.jp/contests/abc138/tasks/abc138_d

解答1 (WA)

python3

1 2import sys 3 4def main(): 5 n, q = [int(x) for x in sys.stdin.readline().split()] 6 AB = [[] for _ in range(n+1)] 7 for _ in range(n-1): 8 a, b = [int(x) for x in sys.stdin.readline().split()] 9 AB[a].append(b) 10 11 ans = [0 for _ in range(n+1)] 12 for _ in range(q): 13 p, x = [int(x) for x in sys.stdin.readline().split()] 14 ans[p] += x 15 16 for a in range(1, n): 17 for b in AB[a]: 18 ans[b] += ans[a] 19 20 print(' '.join(map(str, ans[1:]))) 21 22if __name__ == "__main__": 23 main() 24

解答2 (AC)

python3

1 2import sys 3 4def main(): 5 n, q = [int(x) for x in sys.stdin.readline().split()] 6 AB = [[] for _ in range(n+1)] 7 for _ in range(n-1): 8 a, b = [int(x) for x in sys.stdin.readline().split()] 9 AB[a].append(b) 10 AB[b].append(a) 11 # 無向グラフとして考える 12 13 ans = [0 for _ in range(n+1)] 14 for _ in range(q): 15 p, x = [int(x) for x in sys.stdin.readline().split()] 16 ans[p] += x 17 18 stack = [1] 19 parent = [0 for _ in range(n+1)] 20 while stack: 21 x = stack.pop() 22 for y in AB[x]: 23 if y != parent[x]: # yがxの親でなければ 24 parent[y] = x # xがyの親 25 stack.append(y) 26 ans[y] += ans[x] 27 28 29 print(' '.join(map(str, ans[1:]))) 30 31if __name__ == "__main__": 32 main() 33 34

一応解答2でACはしたのですが最初解答1でWAだったのが府に落ちず、考えても何がいけないのかよくわかりませんでした

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

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

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

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

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

guest

回答1

0

ベストアンサー

一つ目の解法はグラフが a -> b の有向辺を持つ木だった場合
二つ目の解法はグラフが a <-> b の無向辺を持つ木だった場合というのは、コメントを読む限り理解されてるものだと思います。
勘違いしやすいですがこの問題も有向辺だとは一言も言ってないので、無向辺として解く必要があります。

実はこの問題、解説PDFでも当初有向グラフとして解説されていたのが修正されていたり、本番のテストケースだと一つ目の解法のようにa -> bと考えても通るようになっていました。
ただ問題文だけでは有向グラフだと決めつけることができないので、本番後にafter_contestというテストケースが追加され、今では一つ目のような解法がはじかれるようになっています。

投稿2019/11/17 06:53

yudedako67

総合スコア2047

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

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

退会済みユーザー

退会済みユーザー

2019/11/17 08:29

もう一度グラフを描いてみたら理解できました a < b が満たされていたとしても aが必ずしも親になるわけではないということですね たとえば入力の一部に 4 6 5 6 のような箇所があったとして、 仮に4が6の親なら6は5の親になる みたいなのがイメージできたので 解決しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問