QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 1024 MB Total points: 100

#9093. شجرة

Statistics

توجد شجرة $T=(V,E)$ ذات $N$ رأس. على كل رأس عدد صحيح؛ لاحظ أنه قد يكون سالبًا. نريد إيجاد رسمين جزئيين $T_a=(V_a,E_a)$ و$T_b=(V_b,E_b)$ من $T$ يحققان الشروط التالية.

  • $V_a\ne\varnothing,\quad V_b\ne\varnothing$

  • كل من $T_a$ و$T_b$ متصل.

  • $V_a\cap V_b=\varnothing$

  • لا توجد حافة في $E$ تصل رأسًا من $V_a$ برأس من $V_b$.

  • يجب أن يكون مجموع الأعداد المكتوبة على رؤوس $V_a$ مع الأعداد المكتوبة على رؤوس $V_b$ أكبر ما يمكن.

انظر إلى المثال في الشكل التالي. $T=(\{0,1,2,3,4,5,6\},\{(0,1),(0,2),(2,3),(2,4),(4,6),(5,6)\})$.

problem_9093_ddcbc3512cd7a6ce5c4a3a9070bfa719.png

الأعداد فوق الرؤوس هي أرقامها، والأعداد داخلها هي قيمها. قد توجد عدة اختيارات لـ$T_a,T_b$ تحقق الشروط. باختيار $V_a=\{0,2,3\}$ و$V_b=\{5,6\}$ نحصل على المجموع الأقصى $\{3+(-1)+4\}+\{5+3\}=14$. توجد اختيارات أخرى، لكن لا يمكن الحصول على قيمة أكبر من $14$.

يجب تنفيذ الدالة التالية.

long long findSum( int N, int C[], int Node1[], int Node2[] );

تُستدعى هذه الدالة مرة واحدة بالضبط. تُمرر المدخلات عبر وسائطها، وقيمتها المعادة هي الإجابة. يمثل $N$ عدد الرؤوس، المرقمة من $0$ إلى $N-1$. لكل $0\le i\le N-1$، تمثل C[i] العدد المكتوب على الرأس $i$. ولكل $0\le i\le N-2$، تصل حافة الرأسين Node1[i] وNode2[i].

تفاصيل التنفيذ

يجب إرسال ملف واحد بالضبط اسمه tree.cpp ينفذ الدالة التالية.

long long findSum( int N, int C[], int Node1[], int Node2[] );

يجب أن تعمل الدالة كما وُصف أعلاه. يمكنك تعريف دوال أخرى للاستخدام الداخلي. يجب ألا ينفذ الكود المرسل عمليات إدخال أو إخراج، وألا يصل إلى ملفات أخرى.

برنامج التقييم النموذجي

يقرأ برنامج التقييم المقدم المدخلات بالتنسيق التالي.

  • السطر 1: $N$

  • السطر 2: $N$ عدد صحيح $C_0,C_1,\ldots,C_{N-1}$، وهي قيم الرؤوس بالترتيب.

  • الأسطر الـ$N-1$ التالية: عددان صحيحان $a,b$ يدلان على حافة بين الرأسين $a$ و$b$.

انتبه: إذا وُجدت مسافات أو محارف أخرى بعد المحرف الذي يمثل آخر رقم في سطر الإدخال، فقد لا يعمل برنامج التقييم بصورة صحيحة.

يطبع برنامج التقييم القيمة التي تعيدها دالتك findSum().

القيود

  • $-10^9\le C_i\le10^9$

  • $3\le N\le500,000$

المهام الفرعية

  1. (7 نقطة) $N\le20$

  2. (19 نقطة) $N\le5000$

  3. (74 نقطة) لا توجد قيود إضافية.

أمثلة

الإدخال 1

7
3 -5 -1 4 2 5 3
0 1
0 2
2 3
2 4
4 6
5 6

الإخراج 1

14

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.