Problem

5 /12


رسم بياني ثنائي

Theory Click to read/hide

رسم بياني ثنائي الأجزاء نبسب ؛
رسم بياني ثنائي الأجزاء - رسم بياني يمكن تقسيم رؤوسه إلى مجموعتين بحيث تربط كل حافة الرؤوس من مجموعات مختلفة.


في كثير من الأحيان في سياق الرسوم البيانية ثنائية الأجزاء ، يتم استخدام مفهوم & nbsp؛ الألوان & nbsp؛ القمم. يسمى تقسيم الرسم البياني إلى قسمين & nbsp؛ تلوين & nbsp؛ رؤوسه بلونين مختلفين. يجب أن تربط كل حافة رؤوس بلون مختلف.

DFS . & nbsp؛
على & nbsp؛

الخوارزمية

نبدأ الرسم من قمة عشوائية ، نرسمها بلون عشوائي.
عند المرور على طول كل حافة ، قم بطلاء الرأس التالي باللون المعاكس.
إذا وجدنا أثناء التكرار على الرؤوس المجاورة رأسًا مرسومًا بالفعل بنفس لون الرأس الحالي ، فهناك دورة فردية في الرسم البياني ، مما يعني أنه ليس ثنائيًا.

Problem

يسمى الرسم البياني ثنائي الجزء إذا كان من الممكن تلوين رؤوسه بلونين بحيث لا توجد حواف تربط الرؤوس من نفس اللون (أي ، تنتقل كل حافة من قمة اللون الأول إلى رأس الثاني) .
إعطاء رسم بياني. مطلوب التحقق مما إذا كان ثنائيًا ، وإذا كان الأمر كذلك ، فقم بتلوين رؤوسه.
& nbsp؛
إدخال
يحتوي السطر الأول أولاً على الرقم N - عدد رؤوس الرسم البياني (لا يتجاوز 100). تأتي بعد ذلك مصفوفة التقارب - مصفوفة N x N من 0 و 1 (0 تعني عدم وجود حافة ، 1 يعني وجود). الرسم البياني غير موجه ، بدون حلقات.
& nbsp؛
بصمة
في السطر الأول ، اطبع إحدى الرسائل نعم & nbsp؛ أو NO (بناءً على ما إذا كان الرسم البياني ثنائي الأجزاء أم لا). إذا كانت الإجابة نعم ، & nbsp ؛ في السطر الثاني ، اطبع أرقام N - الألوان لتلوين الرؤوس: & nbsp ؛ بالنسبة للون الأول ، استخدم القيمة 1 ، من أجل اللون الثاني - القيمة 2. نبسب ؛ يجب أن يكون الرأس الأول بلون 1.
نبسب ؛
أمثلة <الجسم>
# إدخال الإخراج
1
3
0 1 1
1 0 1
1 1 0
لا
2
3
0 1 1
1 0 0
1 0 0
نعم
1 2 2