Χώρισε τα αξιοθέατα
Υπάρχουν αξιοθέατα στο Μπακού, αριθμημένα από
έως
. Υπάρχουν επίσης
δρόμοι διπλής κατεύθυνσης, αριθμημένοι από
έως
. Κάθε δρόμος συνδέει δύο διαφορετικά αξιοθέατα. Είναι δυνατό να ταξιδέψει κανείς από οποιαδήποτε αξιοθέατο σε οποιοδήποτε άλλο, μέσω των δρόμων.
Η Φατιμά προγραμματίζει να επισκεφθεί όλα τα αξιοθέατα μέσα σε τρεις ημέρες. Έχει ήδη αποφασίσει ότι θέλει να επισκεφθεί αξιοθέατα την πρώτη μέρα,
αξιοθέατα τη δεύτερη μέρα, και
αξιοθέατα την τρίτη μέρα. Επομένως, πρόκειται να χωρίσει τα
αξιοθέατα σε τρία σύνολα
,
, και
, με μεγέθη
,
, και
, αντίστοιχα. Κάθε
αξιοθέατο θα ανήκει σε ακριβώς ένα από τα σύνολα, οπότε
.
Η Φατιμά θα ήθελε να βρει τα σύνολα ,
, και
, έτσι ώστε τουλάχιστον δύο από τα τρία σύνολα να είναι συνδεδεμένα. Ένα σύνολο
από αξιοθέατα ονομάζεται συνδεδεμένο αν είναι δυνατό να ταξιδέψει κανείς ανάμεσα σε δύο οποιαδήποτε αξιοθέατα που ανήκουν στο
χρησιμοποιώντας τους δρομους και χωρίς να περάσει από οποιοδήποτε αξιοθέατο που δεν ανήκει στο
. Μία διαμέριση από αξιοθέατα σε
σύνολα
,
, και
καλείται έγκυρη αν ικανοποιεί τις παραπάνω συνθήκες.
Βοηθήστε τη Φατιμά να βρει μία έγκυρη διαμέριση των αξιοθεάτων (δεδομένων των ,
, και
), ή να αποφασίσει ότι δεν υπάρχει καμία έγκυρη διαμέριση. Αν υπάρχουν περισσότερες έγκυρες διαμερίσεις, μπορείτε να βρείτε οποιαδήποτε από αυτές.
Λεπτομέρειες υλοποίησης
Πρέπει να υλοποιήσετε την ακόλουθη συνάρτηση:
int[] find_split(int n, int a, int b, int c, int[] p, int[] q)
: το πλήθος των αξιοθεάτων.
,
, και
: τα επιθυμητά μεγέθη των συνόλων
,
, και
.
και
: πίνακες μήκους
, που περιέχουν τα άκρα των δρόμων. Για κάθε
(
), τα
και
είναι τα δύο αξιοθέατα που συνδέει ο δρόμος
.
- Η συνάρτηση πρέπει να επιστρέφει έναν πίνακα μήκους
, ας τον ονομάσουμε
. Εάν δεν υπάρχει καμία έγκυρη διαμέριση, το
πρέπει να περιέχει
μηδενικά. Διαφορετικά, για κάθε
, το
πρέπει να έχει μία από τις τιμές
,
ή
, που υποδεικνύουν αντίστοιχα ότι το αξιοθέατο
ανατίθεται στο σύνολο
,
ή
.
Παραδείγματα
Παράδειγμα 1
Θεωρήστε την ακόλουθη κλήση:
find_split(9, 4, 2, 3, [0, 0, 0, 0, 0, 0, 1, 3, 4, 5],
[1, 2, 3, 4, 6, 8, 7, 7, 5, 6])
Μία δυνατή σωστή λύση είναι η . Αυτή η λύση περιγράφει την ακόλουθη διαμέριση:
,
και
. Τα σύνολα
και
είναι συνδεδεμένα.
Παράδειγμα 2
Θεωρήστε την ακόλουθη κλήση:
find_split(6, 2, 2, 2, [0, 0, 0, 0, 0], [1, 2, 3, 4, 5])
Δεν υπάρχει καμία έγκυρη διαμέριση. Επομένως η μόνη σωστή απάντηση είναι .
Περιορισμοί
- Υπάρχει το πολύ ένας δρόμος που συνδέει κάθε ζεύγος αξιοθεάτων.
- Είναι δυνατό να ταξιδέψει κανείς ανάμεσα σε οποιαδήποτε ζεύγος αξιοθεάτων μέσω των δρόμων.
και
για
Υποπροβλήματα
- (
βαθμοί) Κάθε αξιοθέατο είναι άκρο το πολύ δύο δρόμων.
- (
βαθμοί)
- (
βαθμοί)
- (
βαθμοί)
,
- (
βαθμοί) Κανένας επιπλέον περιορισμός.
Υποδειγματικός βαθμολογητής
Ο υποδειγματικός βαθμολογητής διαβάζει την είσοδο στην ακόλουθη μορφή:
- γραμμή
:
- γραμμή
:
- γραμμή
(για
):
Ο υποδειγματικός βαθμολογητής τυπώνει ακριβώς μία γραμμή, που περιέχει τον πίνακα που επιστρέφεται από την find_split.
Comments