QOJ.ac

QOJ

시간 제한: 1 s 메모리 제한: 256 MB 총점: 100

#23830. Rumah Besar Modern

통계

Deskripsi Masalah

Anda tersesat ke dalam sebuah rumah besar (mansion). Rumah besar ini memiliki struktur di mana kamar-kamar berbentuk persegi tersusun dalam kisi-kisi ke arah timur-barat dan utara-selatan, dengan $M$ kolom ke arah timur-barat dan $N$ baris ke arah utara-selatan, sehingga totalnya terdapat $M \times N$ kamar. Kamar pada kolom ke-$x$ dari barat ($1 \le x \le M$) dan baris ke-$y$ dari selatan ($1 \le y \le N$) dinyatakan dengan $(x, y)$.

Setiap pasang $2$ kamar yang bersebelahan ke arah timur, barat, selatan, atau utara dihubungkan oleh sebuah pintu yang berada di tengah dinding. Setiap pintu berada dalam salah satu dari dua keadaan: tertutup sehingga tidak dapat dilewati, atau terbuka sehingga dapat dilewati. Ketika pintu terbuka, dibutuhkan waktu $1$ menit untuk berpindah antar bagian tengah kamar-kamar tersebut. Selain itu, di bagian tengah beberapa kamar terdapat sakelar; jika sakelar ditekan terus selama $1$ menit, keadaan buka/tutup dari seluruh pintu di dalam rumah besar akan berganti (berbalik).

Saat ini, semua pintu yang menghubungkan $2$ kamar yang bersebelahan ke arah timur-barat sedang tertutup, dan semua pintu yang menghubungkan $2$ kamar yang bersebelahan ke arah utara-selatan sedang terbuka. Saat ini Anda berada di bagian tengah kamar $(1, 1)$, dan Anda ingin berpindah ke bagian tengah kamar $(M, N)$ dalam waktu sesingkat mungkin.

Tugas

Diberikan ukuran rumah besar $M, N$ serta posisi $(X_1, Y_1), (X_2, Y_2), \dots, (X_K, Y_K)$ dari $K$ kamar yang memiliki sakelar, buatlah program untuk mencari berapa menit waktu tersingkat yang diperlukan untuk berpindah dari bagian tengah kamar $(1, 1)$ ke bagian tengah kamar $(M, N)$, dimulai dari keadaan di mana semua pintu yang menghubungkan $2$ kamar bersebelahan arah timur-barat tertutup dan semua pintu yang menghubungkan $2$ kamar bersebelahan arah utara-selatan terbuka. Namun, jika tidak mungkin mencapai kamar $(M, N)$, tunjukkan hal tersebut.

Batasan

  • $2 \le M \le 100000$: banyaknya kamar ke arah timur-barat di rumah besar.
  • $2 \le N \le 100000$: banyaknya kamar ke arah utara-selatan di rumah besar.
  • $1 \le K \le 200000$: banyaknya kamar yang memiliki sakelar.
  • $1 \le X_i \le M$: posisi arah timur-barat dari kamar yang memiliki sakelar.
  • $1 \le Y_i \le N$: posisi arah utara-selatan dari kamar yang memiliki sakelar.

Masukan

Bacalah data berikut dari masukan standar.

  • Pada baris ke-$1$, tertulis bilangan bulat $M, N, K$ yang dipisahkan oleh spasi. $M$ menyatakan banyaknya kamar ke arah timur-barat di rumah besar, $N$ menyatakan banyaknya kamar ke arah utara-selatan di rumah besar, dan $K$ menyatakan banyaknya kamar yang memiliki sakelar.
  • Pada baris ke-$i$ ($1 \le i \le K$) dari $K$ baris berikutnya, tertulis bilangan bulat $X_i, Y_i$ yang dipisahkan oleh spasi. Ini menyatakan bahwa terdapat sakelar di bagian tengah kamar $(X_i, Y_i)$. $K$ pasangan $(X_1, Y_1), (X_2, Y_2), \dots, (X_K, Y_K)$ saling berbeda satu sama lain.

Keluaran

Cetak ke keluaran standar dalam $1$ baris sebuah bilangan bulat yang menyatakan waktu tersingkat dalam menit yang diperlukan untuk berpindah. Namun, jika tidak mungkin mencapai kamar $(M, N)$, cetak bilangan bulat $-1$ sebagai gantinya.

Kriteria Penilaian

  • Untuk $20\%$ dari data penilaian, berlaku $M \le 1000$ dan $N \le 1000$.
  • Untuk $30\%$ dari data penilaian, berlaku $K \le 2000$.
  • Untuk $50\%$ dari data penilaian, setidaknya salah satu dari $2$ kondisi tersebut terpenuhi. Selain itu, tidak ada data penilaian yang memenuhi kedua ($2$) kondisi tersebut sekaligus.

Contoh 1

Masukan

3 2 1
1 2

Keluaran

4

Penjelasan

Pada contoh ini, Anda dapat berpindah dari bagian tengah kamar $(1, 1)$ ke bagian tengah kamar $(3, 2)$ dalam $4$ menit melalui tindakan berikut, dan ini adalah waktu tersingkat:

  • Berpindah ke bagian tengah kamar $(1, 2)$.
  • Menekan sakelar di bagian tengah kamar $(1, 2)$.
  • Berpindah ke bagian tengah kamar $(2, 2)$.
  • Berpindah ke bagian tengah kamar $(3, 2)$.

Keadaan rumah besar pada saat itu ditunjukkan pada gambar di bawah ini. Pada gambar, arah kanan adalah timur, arah atas adalah utara, tanda $\times$ menyatakan posisi Anda, dan tanda $\bigcirc$ menyatakan sakelar.

fig1

Contoh 2

Masukan

3 2 1
2 1

Keluaran

-1

Penjelasan

Pada contoh ini, Anda tidak dapat mencapai kamar $(3, 2)$.

Contoh 3

Masukan

8 9 15
3 1
3 2
3 7
3 8
1 1
4 5
4 3
5 6
5 8
6 3
6 2
7 5
8 9
8 6
8 5

Keluaran

25

Penjelasan

Pada contoh ini, keadaan awal rumah besar ditunjukkan seperti gambar di bawah ini. Perhatikan bahwa bisa saja terdapat sakelar di bagian tengah kamar $(1, 1)$ atau kamar $(M, N)$.

fig2

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.