Deskripsi: Kamu adalah pekerja di suatu hotel. Dan di hotel tersebut ada [tex]N[/tex] kamar, dari nomor [tex]0[/tex] sampai [tex](n-1)[/tex]. Dan semua kamar terkunci kecuali kamar [tex]0[/tex]. Tujuan anda adalah membersihkan semua kamar. Tentu saja kamar tersebut hanya bisa dibuka ketika kamu mempunyai kunci nya.
Saat anda mengunjungi suatu kamar mungkin akan ada beberapa kunci yang bisa kamu gunakan untuk membuka kamar lain yang masih terkunci.
Sekarang pertanyaan - nya. Apakah kamu bisa membersihkan semua kamar atau tidak ?
Masukan: Baris pertama adalah [tex]N[/tex] banyaknya kamar dan [tex]E[/tex] banyak suatu kunci yang tersimpan pada suatu kamar. Baris selanjutnya adalah kamar [tex]X_{i}[/tex] dan kunci kamar [tex]Y_{i}[/tex].
Jawaban:
#include <iostream>
#include <vector>
using namespace std;
bool canCleanRooms(int n, int e, const vector<int>& x, const vector<int>& y) {
vector<bool> visited(n, false); // Menyimpan status kamar, apakah sudah dikunjungi atau belum
visited[0] = true; // Kamar awal dikunjungi
int count = 1; // Jumlah kamar yang sudah dikunjungi
for (int i = 0; i < e; i++) {
if (visited[y[i]]) { // Jika kunci yang digunakan dapat membuka kamar yang terkunci
if (!visited[x[i]]) { // Jika kamar yang dapat dibuka belum dikunjungi
visited[x[i]] = true; // Tandai kamar tersebut sudah dikunjungi
count++;
}
}
if (count == n) { // Jika semua kamar sudah dikunjungi
return true;
}
}
return false;
}
int main() {
int n, e;
cin >> n >> e;
vector<int> x(e), y(e);
for (int i = 0; i < e; i++) {
cin >> x[i] >> y[i];
}
if (canCleanRooms(n, e, x, y)) {
cout << "YA" << endl;
} else {
cout << "TIDAK" << endl;
}
return 0;
}