Negara Kesatuan Republik Wombatland, Part II (QUTS01)

advertisement
Negara Kesatuan Republik Wombatland, Part II (QUTS01)
Masa-masa damai di negri Wombatland nampaknya hanya bertahan beberapa minggu saja. Setelah usaha
pembangunan jalan-jalan tol pada tugas T0501, sekarang ada dua daerah yang kembali bermusuhan dan tidak mau
daerahnya terhubung satu sama lain. Para petinggi wombat pun mengadakan pertemuan untuk membicarakan
rencana peruntuhan beberapa jalan tol demi memisahkan kedua daerah tersebut.
Sama seperti pembangunan jalan tol yang memakan biaya, meruntuhkannya pun menghabiskan dana yang cukup
banyak. Selain itu, karena satu dan lain hal, tidak semua jalanan bisa diruntuhkan. Dari hasil pertemuan, para
petinggi wombat telah mengeluarkan daftar jalan-jalan tol yang mungkin diruntuhkan secara berurutan dari yang
paling murah hingga yang paling mahal. Sayangnya para wombat ini kurang cerdas, sehingga mereka tidak dapat
menentukan apakah setelah suatu jalan tol diruntuhkan, kedua daerah yang bermusuhan menjadi terpisah atau
tidak. Mereka juga punya kepercayaan bahwa jalan tol yang biaya peruntuhannya lebih murah selalu harus
diruntuhkan duluan sebelum jalan tol yang lebih mahal.
Sebagai contoh, perhatikan peta Wombatland berikut ini:
Jalan-jalan tol yang mungkin diruntuhkan adalah yang
ditandai dengan garis putus-putus, secara berurutan dari
murah ke mahal adalah:
2-1
3-4
2-5
Misalnya daerah yang bermusuhan adalah daerah 0 & 4.
Jika jalan 2-1 diruntuhkan, daerah 0 dan 4 masih tetap
terhubung. Berikutnya jika jalan 3-4 diruntuhkan,
barulah keduanya terpisah. Jadi untuk memisahkan
daerah 0 & 4, perlu meruntuhkan 2 jalan tol.
Anda diberikan data keterhubungan daerah-daerah di Wombatland pada awalnya, dua daerah yang bermusuhan,
dan daftar jalan-jalan tol yang mungkin diruntuhkan secara berurutan dari yang termurah hingga yang termahal.
Bantulah para wombat untuk menentukan berapa jalan tol yang perlu mereka runtuhkan supaya kedua daerah yang
bermusuhan dapat terpisahkan, atau tampilkan tulisan “FAIL” jika keduanya tetap tidak dapat dipisahkan setelah
meruntuhkan semua jalan tol pada daftar.
Spesifikasi Input
Input diawali dengan 5 buah bilangan bulat yang dipisahkan spasi:




N menunjukkan banyaknya daerah (1 ≤ N ≤ 100). Setiap daerah dinomori dari 0 s.d. N-1.
M menunjukkan banyaknya jalan tol mula-mula (0 ≤ M ≤ Nx(N-1)). Pada awalnya semua daerah di
Wombatland terhubung (connected graph).
A dan B, menunjukkan nomor daerah yang bermusuhan (0 ≤ A,B ≤ N-1).
J menunjukkan banyaknya jalan tol yang mungkin diruntuhkan (0 ≤ J ≤ M).
M baris berikutnya masing-masing berisi dua nomor daerah yang terhubung dengan satu jalan tol. Jalan tol selalu
unik, artinya tidak ada dua daerah yang dihubungkan oleh lebih dari satu jalan tol. J baris berikutnya masing-masing
berisi dua nomor daerah yang menunjukkan jalan tol yang mungkin diruntuhkan, terurut mulai dari yang paling
murah hingga yang paling mahal.
Spesifikasi Output
Jika daerah A dan B mungkin dipisahkan, keluarkan jumlah jalan tol yang harus diruntuhkan. Jika tidak mungkin,
keluarkan tulisan “FAIL” (tanpa kutip).
Contoh Input #1
7 8 0 4 3
2 6
6 5
2 1
0 1
2 5
1 3
0 2
3 4
1 2
3 4
2 5
Contoh Output #1
2
Contoh Input #2
7 8 2 6 3
2 6
6 5
2 1
0 1
2 5
1 3
0 2
3 4
1 2
3 4
2 5
Contoh Output #2
FAIL
Cycle Finding (QUTS02)
Salah satu cara membangkitkan bilangan acak adalah dengan menggunakan pseudo-random generator. Diberikan
fungsi f(x) dan sebuah nilai awal x0 yang disebut seed. Angka acak ke-i dibangkitkan dengan cara menghitung
. Salah satu fungsi f(x) sederhana untuk pembangkit bilangan acak adalah
,
di mana Z, I dan M adalah suatu konstanta bilangan bulat. Sifat bilangan acak yang dibangkitkan dengan cara ini
adalah suatu saat pasti mengalami pengulangan nilai.
Sebagai contoh, untuk Z=7, I=5, dan M=12, rumus f(x) menjadi
Misalkan x0 = 4, maka dapat dihitung nilai-nilai berikutnya adalah sebagai berikut:
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
4 9 8 1 0 5 4 9 8 1 0
5
Dapat dilihat bahwa x6=x0, maka x7 pasti sama dengan x2, demikian seterusnya. Nilai-nilai yang berulang adalah 4, 9,
8, 1, 0, 5, yaitu sebanyak 6 buah. Panjang deret ini disebut nilai . Selain itu, dikenal juga nilai , yaitu nomor elemen
yang pertama kali berulang. Pada kasus ini x6=x0, maka =0.
Contoh lain, misalnya Z=3, I=1, M=4, dan x0=7, maka nilai acak yang didapat adalah:
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
7 2 3 2 3 2 3 2 3 2 3
2
Pada kasus ini nilai yang berulang adalah 2,3, maka =2. Elemen yang pertama kali berulang adalah x3=x1, maka =1.
Pseudo-random generator yang baik sebaiknya memiliki nilai  dan  yang besar, sehingga deret terlihat benarbenar acak. Pada soal ini, anda diberikan nilai Z, I, M, dan x 0, dan anda diminta untuk menghitung nilai  dan .
Note:
Asumsikan deret pada soal ini memiliki nilai  dan  yang lebih kecil dari 1 juta. Soal ini dapat diselesaikan dengan
menggunakan bantuan HashMap untuk menyimpan nilai-nilai apa saja yang pernah muncul, dan muncul di index ke
berapa.
Spesifikasi Input
Input terdiri dari satu baris yang berisi 4 bilangan bulat Z, I, M, dan x 0, masing-masing bernilai antara 1 s.d. 1 juta.
Spesifikasi Output
Keluarkan pada satu baris dengan dipisahkan sebuah spasi, nilai  dan .
Contoh Input #1
7 5 12 4
Contoh Output #1
6 0
Contoh Input #2
3 1 4 7
Contoh Output #2
2 1
Download