ধরুন আমাদের কাছে 'ট্রি' নামক মানের একটি 2D তালিকা রয়েছে যা একটি n-ary গাছকে প্রতিনিধিত্ব করে এবং 'রঙ' নামক মানের আরেকটি তালিকা। গাছটিকে একটি সংলগ্ন তালিকা হিসাবে উপস্থাপন করা হয় এবং এর মূল হল গাছ[0]।
i-th নোড -
এর বৈশিষ্ট্য-
গাছ[i] তার সন্তান এবং পিতামাতা।
-
রঙ[i] এর রঙ।
আমরা একটি নোডকে N "বিশেষ" বলি যদি সাবট্রির প্রতিটি নোড যার মূল N এ থাকে তার একটি অনন্য রঙ থাকে। সুতরাং আমাদের এই গাছটি আছে, আমাদের বিশেষ নোডের সংখ্যা খুঁজে বের করতে হবে।
So, if the input is like tree = [ [1,2], [0], [0,3], [2] ]
রং =[1, 2, 1, 1], তাহলে আউটপুট হবে 2।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
ফলাফল :=0
-
dfs(0, -1)
-
ফেরত ফলাফল
-
একটি ফাংশন সংজ্ঞায়িত করুন check_intersection()। এটি রং লাগবে, চাইল্ড_রং
-
যদি (রঙ) এর দৈর্ঘ্য <(child_colors) এর দৈর্ঘ্য, তাহলে
-
প্রতিটি c রঙের জন্য, করুন
-
চাইল্ড_রঙে c যদি অ-শূন্য হয়, তাহলে
-
রিটার্ন ট্রু
-
-
-
-
অন্যথায়,
-
চাইল্ড_রঙে প্রতিটি c-এর জন্য করুন
-
c যদি চাইল্ড_রঙে থাকে, তাহলে
-
রিটার্ন ট্রু
-
-
-
-
-
একটি ফাংশন dfs() সংজ্ঞায়িত করুন। এটি নোড নেবে, পূর্বে
-
রং :={রঙ[নোড]}
-
গাছের [নোড] প্রতিটি শিশুর জন্য, করুন
-
যদি সন্তান আগের মত না হয়, তাহলে
-
child_colors :=dfs(চাইল্ড, নোড)
-
যদি রং এবং চাইল্ড_রঙ খালি না হয়, তাহলে
-
যদি চেক_ছেদ (রঙ, চাইল্ড_রং) অ-শূন্য হয়, তাহলে
-
রং :=শূন্য
-
-
অন্যথায়,
-
যদি (রঙ) এর দৈর্ঘ্য <(child_colors) এর দৈর্ঘ্য, তাহলে,
-
চাইল্ড_রং :=চাইল্ড_রং বা রং
-
রং :=চাইল্ড_রঙ
-
-
অন্যথায়,
-
রং :=রং বা চাইল্ড_রঙ
-
-
-
-
অন্যথায়,
-
রং :=শূন্য
-
-
-
যদি রং খালি না হয়, তাহলে
-
ফলাফল :=ফলাফল + 1
-
-
রিটার্ন রং
-
-
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
import collections class Solution: def solve(self, tree, color): self.result = 0 def dfs(node, prev): colors = {color[node]} for child in tree[node]: if child != prev: child_colors = dfs(child, node) if colors and child_colors: if self.check_intersection(colors, child_colors): colors = None else: if len(colors) < len(child_colors): child_colors |= colors colors = child_colors else: colors |= child_colors else: colors = None if colors: self.result += 1 return colors dfs(0, -1) return self.result def check_intersection(self, colors, child_colors): if len(colors) < len(child_colors): for c in colors: if c in child_colors: return True else: for c in child_colors: if c in colors: return True ob = Solution() print(ob.solve( [ [1,2], [0], [0,3], [2] ], [1, 2, 1, 1]))
ইনপুট
[ [1,2], [0], [0,3], [2] ], [1, 2, 1, 1]
আউটপুট
2