Module: جستجوی عمیق DFS


Problem

7 /12


مرتب سازی توپولوژیکی

Theory Click to read/hide

الگوریتم را می توان به صورت زیر توصیف کرد:
یک نمودار جهت دار با n رأس و m یال داده می شود. لازم است که رئوس آن را مجدداً شماره گذاری کنید به گونه ای که هر یال از یک راس با عدد کمتر به یک راس با عدد بالاتر منتهی شود.
به عبارت دیگر، لازم است جایگشتی از رئوس (ترتیب توپولوژیکی) مطابق با ترتیب داده شده توسط تمام یال های نمودار پیدا شود.
ما از جستجوی عمق (dfs(v))
استفاده خواهیم کرد
اگر راس خود را در زمان خروج از \(dfs(v)\)  به ابتدای لیست اضافه کنیم، در پایان در این لیست شما یک مرتب سازی توپولوژیکی دریافت می کنید.
بنابراین، مرتب‌سازی توپولوژیکی مورد نظر — این به ترتیب نزولی زمان خروج مرتب شده است.

Problem

با توجه به یک نمودار بدون وزن جهت دار. لازم است آن را از نظر توپولوژیکی مرتب کنید.

ورودی: خط اول شامل دو عدد طبیعی n و m است (1≤n≤105، 1≤m≤10< sup >5) — تعداد رئوس و یال های نمودار به ترتیب. خطوط m بعدی لبه های نمودار را فهرست می کنند. هر یال با یک جفت اعداد — به ترتیب اعداد رئوس شروع و پایان.
 
خروجی: هر نوع توپولوژیکی نمودار را به صورت دنباله ای از اعداد رأس چاپ کنید. اگر نمودار را نمی توان از نظر توپولوژیکی مرتب کرد، −1.
را چاپ کنید خط اول شامل تعداد رئوس N و یال های M است. 

نمونه‌ها <سر> <بدن>
# ورودی خروجی
1 4 4
14
4 3
4 2
3 2
1 4 3 2