Loading [MathJax]/jax/output/HTML-CSS/jax.js

المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره ی تابستان:دوره ی ۹:عملی:سوال ۱۳

زیر درخت

فرض کنید T1 و T2 دو درخت ریشه‌دار باشند که در هرکدام به هر راس یک عدد به نشانه‌ی برچسب آن راس نسبت داده شده باشد و هر راس حداکثر دو فرزند داشته باشد. درخت T1 زیردرخت T2 است اگر نگاشت یک‌به‌یک f از مجموعه‌ راس‌های T1 به مجموعه راس‌های T2 وجود داشته باشد به طوری که:

  • به ازای هر راس v از T1، برچسب v با برچسب f(v) یکسان باشد.
  • به ازای هر دو راس v و w از T1، f(v) از اجداد f(w) باشد اگر و تنها اگر v از اجداد w باشد.

برنامه‌ای بنویسید که k‌درخت T2،T1،… و Tk با شرایط گفته‌ شده را از ورودی دریافت کند و تعیین کند که کدام یک زیردرخت دیگری است.

ورودي

خط نخست فایل ورودی شامل عدد k است. درخطوط بعدی، مشخصات درختها به ترتیب به شکل ذیل آمده است. مشخصات هر درخت n راسی در n+1 خط توصیف می‌شود: خط اول n و شماره‌ی راس ریشه‌ی درخت، خط دوم n عدد به نشانه‌ی برچسب راس‌ها با حفظ ترتیب و n1 خط بعد نیمه‌ی فوقانی ماتریس مجاورت گراف را در بر دارد.

خروجي

در فایل خروجی ماتریس Mn×n را در n خط با لحاظ فاصله بین درایه‌های هر سطر آن چاپ کنید. اگر درخت Ti زیردرخت درخت Tj باشد، درایه‌ی Mij را برابر یک و در غیر این صورت، برابر صفر قرار دهید. فرض کنید مقادیر n و k از ۱۰۰ بیش‌تر نیست. برچسب راس‌ها هم از بین اعداد قابل ذخیره‌سازی در یک متغیر از نوع Integer انتخاب می‌شوند.

ورودي و خروجي نمونه

ورودي نمونه خروجي نمونه
2
3 1
1 3 2
1 1
0
6 1
1 1 2 2 4 3
1 1 0 0 0
0 1 1 0
0 0 1
0 0
0
1 1
0 1

ابزار صفحه