


Jarak Terpendek Selepas Pertanyaan Penambahan Jalan I
3243. Jarak Terpendek Selepas Pertanyaan Penambahan Jalan I
Kesukaran: Sederhana
Topik: Tatasusunan, Keluasan-Carian Pertama, Graf
Anda diberi pertanyaan tatasusunan integer n dan integer 2D.
Terdapat n bandar bernombor dari 0 hingga n - 1. Pada mulanya, terdapat jalan sehala dari bandar i ke bandar i 1 untuk semua 0 <= i < n - 1.
pertanyaan[i] = [ui, vi] mewakili penambahan jalan sehala baharu dari bandar ui ke bandar vi. Selepas setiap pertanyaan, anda perlu mencari panjang laluan terpendek dari bandar 0 ke bandar n - 1.
Kembalikan jawapan tatasusunan di mana bagi setiap i dalam julat [0, queries.length - 1], answer[i] ialah panjang laluan terpendek dari bandar 0 ke bandar n - 1 selepas memproses pertama i 1 pertanyaan.
Contoh 1:
- Input: n = 5, pertanyaan = [[2,4],[0,2],[0,4]]
- Output: [3,2,1]
-
Penjelasan:
Selepas penambahan jalan dari 2 kepada 4, panjang laluan terpendek dari 0 hingga 4 ialah 3.
Selepas penambahan jalan dari 0 kepada 2, panjang laluan terpendek dari 0 hingga 4 ialah 2.
Selepas penambahan jalan dari 0 kepada 4, panjang laluan terpendek dari 0 hingga 4 ialah 1.
Contoh 2:
- Input: n = 4, pertanyaan = [[0,3],[0,2]]
- Output: [1,1]
-
Penjelasan:
Selepas penambahan jalan dari 0 hingga 3, panjang laluan terpendek dari 0 hingga 3 ialah 1.
Selepas penambahan jalan dari 0 kepada 2, panjang laluan terpendek kekal 1.
Kekangan:
- 3 <= n <= 500
- 1 <= queries.length <= 500
- pertanyaan[i].panjang == 2
- 0 <= pertanyaan[i][0] < pertanyaan[i][1] < n
- 1 < pertanyaan[i][1] - pertanyaan[i][0]
- Tiada jalan berulang antara pertanyaan.
Petunjuk:
- Kekalkan graf dan gunakan algoritma laluan terpendek yang cekap selepas setiap kemas kini.
- Kami menggunakan BFS/Dijkstra untuk setiap pertanyaan.
Penyelesaian:
Kami perlu mensimulasikan penambahan jalan antara bandar dan mengira laluan terpendek dari bandar 0 ke bandar n - 1 selepas setiap penambahan jalan. Memandangkan kekangan dan sifat masalah, kami boleh menggunakan Breadth-First Search (BFS) untuk graf tidak berwajaran.
Pendekatan:
-
Perwakilan Graf:
- Kami boleh mewakili bandar dan jalan raya menggunakan senarai bersebelahan. Pada mulanya, setiap bandar i akan mempunyai jalan ke bandar i 1 untuk semua 0 <= i < n - 1.
- Selepas setiap pertanyaan, kami menambah jalan dari u_i ke v_i ke dalam graf.
-
Pengiraan Laluan Terpendek (BFS):
- Kita boleh menggunakan BFS untuk mengira laluan terpendek dari bandar 0 ke bandar n - 1. BFS berfungsi dengan baik di sini kerana semua jalan mempunyai berat yang sama (setiap jalan mempunyai panjang 1).
-
Lelaran atas Pertanyaan:
- Untuk setiap pertanyaan, kami akan menambah jalan baharu pada graf dan kemudian menggunakan BFS untuk mencari laluan terpendek dari bandar 0 ke bandar n - 1. Selepas memproses setiap pertanyaan, kami menyimpan hasilnya dalam tatasusunan output.
-
Kecekapan:
- Memandangkan kami menggunakan BFS selepas setiap pertanyaan, dan saiz graf boleh paling banyak 500 bandar dengan sehingga 500 pertanyaan, kerumitan masa untuk setiap BFS ialah O(n m), dengan n ialah bilangan bandar dan m ialah bilangan jalan raya. Kita perlu melakukan BFS sehingga 500 kali, jadi penyelesaian akan berjalan dengan cekap dalam kekangan masalah.
Mari laksanakan penyelesaian ini dalam PHP: 3243. Jarak Terpendek Selepas Pertanyaan Penambahan Jalan I
Penjelasan:
Permulaan Graf:
- Graf senarai bersebelahan digunakan untuk mewakili bandar dan jalan raya.
- Pada mulanya, jalan raya hanya wujud antara bandar berturut-turut (i hingga i 1).
Fungsi BFS:
- BFS digunakan untuk mengira jarak terpendek dari bandar 0 ke bandar n - 1. Kami mengekalkan baris gilir untuk BFS dan jarak tatasusunan untuk menyimpan bilangan minimum jalan (tepi) untuk sampai ke setiap bandar.
- Pada mulanya, jarak ke bandar 0 ditetapkan kepada 0 dan semua bandar lain mempunyai jarak infiniti (PHP_INT_MAX).
- Semasa kami memproses setiap bandar dalam baris gilir BFS, kami mengemas kini jarak untuk bandar jirannya dan meneruskan sehingga semua bandar yang boleh dicapai dilawati.
Pemprosesan Pertanyaan:
- Untuk setiap pertanyaan, jalan baharu ditambahkan pada graf (u -> v).
- BFS dipanggil untuk mengira laluan terpendek dari bandar 0 ke bandar n-1 selepas kemas kini.
- Hasil BFS disimpan dalam tatasusunan hasil.
Output:
- Tatasusunan hasil mengandungi panjang laluan terpendek selepas setiap pertanyaan.
Kerumitan Masa:
- Setiap BFS mengambil O(n m), dengan n ialah bilangan bandar dan m ialah bilangan jalan. Memandangkan bilangan pertanyaan ialah q, kerumitan masa keseluruhan ialah O(q * (n m)), yang sepatutnya cekap untuk kekangan yang diberikan.
Contoh Panduan:
Untuk input n = 5 dan pertanyaan = [[2, 4], [0, 2], [0, 4]]:
- Pada mulanya, jalan raya adalah [0 -> 1 -> 2 -> 3 -> 4].
- Selepas pertanyaan pertama [2, 4], jalan ialah [0 -> 1 -> 2 -> 3 -> 4] dan laluan terpendek dari 0 hingga 4 ialah 3 (menggunakan laluan 0 -> 1 -> 2 -> 4).
- Selepas pertanyaan kedua [0, 2], jalan ialah [0 -> 2, 1 -> 2 -> 3 -> 4], dan laluan terpendek dari 0 hingga 4 ialah 2 (menggunakan laluan 0 -> 2 -> 4).
- Selepas pertanyaan ketiga [0, 4], jalan ialah [0 -> 2, 1 -> 2 -> 3 -> 4], dan laluan terpendek dari 0 hingga 4 ialah 1 (jalan terus 0 -> 4).
Oleh itu, outputnya ialah [3, 2, 1].
Fikiran Akhir:
- Penyelesaian menggunakan BFS untuk setiap pertanyaan untuk mengira laluan terpendek dengan cekap.
- Graf dikemas kini secara dinamik apabila jalan baharu ditambahkan dalam setiap pertanyaan.
- Penyelesaian berfungsi dengan baik dalam kekangan masalah dan cekap mengendalikan sehingga 500 pertanyaan dengan sehingga 500 bandar.
Pautan Kenalan
Jika anda mendapati siri ini membantu, sila pertimbangkan untuk memberi repositori bintang di GitHub atau berkongsi siaran pada rangkaian sosial kegemaran anda ?. Sokongan anda amat bermakna bagi saya!
Jika anda mahukan kandungan yang lebih berguna seperti ini, sila ikuti saya:
- GitHub
Atas ialah kandungan terperinci Jarak Terpendek Selepas Pertanyaan Penambahan Jalan I. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

Fungsi penghitungan dalam Php8.1 meningkatkan kejelasan dan jenis keselamatan kod dengan menentukan pemalar yang dinamakan. 1) Penghitungan boleh menjadi bilangan bulat, rentetan atau objek, meningkatkan kebolehbacaan kod dan keselamatan jenis. 2) Penghitungan adalah berdasarkan kelas dan menyokong ciri-ciri berorientasikan objek seperti traversal dan refleksi. 3) Penghitungan boleh digunakan untuk perbandingan dan tugasan untuk memastikan keselamatan jenis. 4) Penghitungan menyokong penambahan kaedah untuk melaksanakan logik kompleks. 5) Pemeriksaan jenis dan pengendalian ralat yang ketat boleh mengelakkan kesilapan biasa. 6) Penghitungan mengurangkan nilai sihir dan meningkatkan keupayaan, tetapi memberi perhatian kepada pengoptimuman prestasi.

Penerapan prinsip pepejal dalam pembangunan PHP termasuk: 1. Prinsip Tanggungjawab Tunggal (SRP): Setiap kelas bertanggungjawab untuk hanya satu fungsi. 2. Prinsip Terbuka dan Tutup (OCP): Perubahan dicapai melalui lanjutan dan bukannya pengubahsuaian. 3. Prinsip Penggantian Lisch (LSP): Subkelas boleh menggantikan kelas asas tanpa menjejaskan ketepatan program. 4. Prinsip Pengasingan Antara Muka (ISP): Gunakan antara muka halus untuk mengelakkan kebergantungan dan kaedah yang tidak digunakan. 5. Prinsip Inversi Ketergantungan (DIP): Modul peringkat tinggi dan rendah bergantung kepada abstraksi dan dilaksanakan melalui suntikan ketergantungan.

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Prinsip reka bentuk Restapi termasuk definisi sumber, reka bentuk URI, penggunaan kaedah HTTP, penggunaan kod status, kawalan versi, dan benci. 1. Sumber harus diwakili oleh kata nama dan dikekalkan pada hierarki. 2. Kaedah HTTP harus mematuhi semantik mereka, seperti GET digunakan untuk mendapatkan sumber. 3. Kod status hendaklah digunakan dengan betul, seperti 404 bermakna sumber tidak wujud. 4. Kawalan versi boleh dilaksanakan melalui URI atau header. 5. Boots Operasi Pelanggan Hateoas melalui pautan sebagai tindak balas.

Dalam PHP, pengendalian pengecualian dicapai melalui percubaan, menangkap, akhirnya, dan membuang kata kunci. 1) blok percubaan mengelilingi kod yang boleh membuang pengecualian; 2) Blok tangkapan mengendalikan pengecualian; 3) Akhirnya Blok memastikan bahawa kod itu sentiasa dilaksanakan; 4) Lemparan digunakan untuk membuang pengecualian secara manual. Mekanisme ini membantu meningkatkan keteguhan dan mengekalkan kod anda.

Fungsi utama kelas tanpa nama dalam PHP adalah untuk membuat objek satu kali. 1. Kelas tanpa nama membenarkan kelas tanpa nama ditakrifkan secara langsung dalam kod, yang sesuai untuk keperluan sementara. 2. Mereka boleh mewarisi kelas atau melaksanakan antara muka untuk meningkatkan fleksibiliti. 3. Beri perhatian kepada prestasi dan kebolehbacaan kod apabila menggunakannya, dan elakkan berulang kali menentukan kelas tanpa nama yang sama.
