diff --git a/README.md b/README.md
index f77e0e810edfc34916acba1e68f804cc665adacd..084cb3b0d8d790cfbb71c775498b91539f7dbce6 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,73 @@
-# Announcement
-
-Beberapa file yang harus ada dalam repositori tersebut diantaranya:
-* Direktori src yang berisi source code yang anda buat.
-* File output yang berisi hasil uji dijkstra algorithm pada data uji.
-* Makefile. Buatlah sehingga kompilasi program dapat dilakukan hanya dengan pemanggilan command ’make’ saja.
-* File README.md yang berisi:
-    * Petunjuk penggunaan program.
-    * Pembagian tugas. Sampaikan dalam list pengerjaan untuk setiap mahasiswa. Sebagai contoh: XXXX mengerjakan fungsi YYYY, ZZZZ, dan YYZZ.
-    * Laporan pengerjaan, dengan struktur laporan sesuai dengan deskripsi pada bagian sebelumnya.
+# Petunjuk Penggunaan Program
+
+# Pembagian Tugas
+- Fata Nugraha (13517109) mengerjakan fungsi dijkstra serial (mengubah matriks menjadi 1D), fungsi untuk memparalelkan dijkstra.
+- Edward Alexander jaya (13517115) mengerjakan fungsi menulis output file dan pengujian pada server.
+
+# Laporan Pengerjaan
+#### Deskripsi Solusi Paralel
+- Setiap thread mengerjakan dijkstra untuk setiap node pada matriks. Jika suatu thread sudah mengerjakan dijkstra suatu node, namun terdapat node lain yang belum dijikstrakan, maka thread akan mengambil node lain tersebut. Jika semua node sudah di-dijkstrakan, proses dijkstra selesai.
+Contoh:
+Pada matriks dengan jumlah node (N) = 100 dan jumlah thread = 5, dengan counter node[0.. N-1]
+  - Thread dengan rank = 0 menjalankan algoritma dijkstra dengan counter = 0, counter++ (node asal = 0)
+  - Thread dengan rank = 1 menjalankan algoritma dijkstra dengan counter = 1, counter++ (node asal = 1)
+  - Thread dengan rank = 2 menjalankan algoritma dijkstra dengan counter = 2, counter++ (node asal = 2)
+  - Thread dengan rank = 3 menjalankan algoritma dijkstra dengan node asal 3, counter++ (node asal = 3)
+  - Thread dengan rank = 4 menjalankan algoritma dijkstra dengan node asal 4, counter++ (node asal = 4)
+  - Sekarang counter = 5. Misalkan thread dengan rank = 0 mengerjakan dijkstranya lebih cepat daripada thread lain, maka thread dengan rank = 0 yang menjalankan dijkstra pada node asal = 5, counter++
+  - Sekarang counter = 6. Misalkan thread dengan rank = 2 mengerjakan dijkstranya lebih cepat daripada thread lain, maka thread dengan rank = 2 yang menjalankan dijkstra pada node asal = 6, counter++
+  - Sekarang counter = 7. Misalkan thread dengan rank = 2 mengerjakan dijkstranya lebih cepat daripada thread lain, maka thread dengan rank = 4 yang menjalankan dijkstra pada node asal = 7, counter++
+  - Proses ini akan terus diulangi sampai counter = N-1
+
+#### Analisis Solusi Paralel
+Program paralel diawali dengan beberapa baris kode:
+
+    #pragma omp parallel for num_threads (thread_count)
+    for (idx = 0; idx < N; ++idx)
+    {
+        dijkstra(graph, idx);
+    }
+
+Iterasi setiap node asal pada matriks. Thread yang sudah dijadwalkan oleh CPU (sesuai dengan penjelasan pada deskripsi solusi paralel) akan menjalankan dijkstra.
+Iterasi berhenti sampai semua node asal pada matriks sudah di-dijkstrakan.
+
+Tidak ada solusi yang lebih cepat. Jika digunakan #pragma omp task, overhead untuk membuat task cukup besar sehingga lebih lama daripada solusi kami. (Sudah dites).
+
+#### Jumlah Thread yang Digunakan
+- Terdapat dua thread yang digunakan. Alasannya, dengan command `lscpu`, ditemukan  `Thread(s) per core:  1`, `Core(s) per socket:  1`, `Socket(s): 2`, berarti terdapat 2 CPU x 1 thread = 2 thread yang digunakan.
+- Tidak ada perbedaan signifikan pada performance saat thread lebih dari dua dibandingkan dengan thread sama dengan dua.
+
+#### Pengukuran Kinerja untuk tiap Kasus Uji
+Berikut adalah hasil pengujian yang dikerjakan pada server 13517115@167.205.35.153, 13517115@167.205.35.154, 13517115@167.205.35.155:
+- **N = 100**
+
+  | Tipe | Percobaan 1 | Percobaan 2 | Percobaan 3 |
+  |---|--- |---|---|
+  | Serial   | 10842.209012 µs  | 11333.854985 µs    | 11208.159995 µs|
+  | Paralel | 5777.048995 µs | 5847.997003 µs | 5822.092993 µs|
+
+- **N = 500**
+
+  | Tipe  |  Percobaan 1 | Percobaan 2  | Percobaan 3  |
+  |---|---|---|---|
+  | Serial |  1230475.542019 µs |  1236974.533007 µs |  1237225.032004 µs |
+  | Paralel  |  635462.980979 µs | 627214.675973 µs  |  627379.151992 µs |
+- **N = 1000**
+
+  | Tipe  |  Percobaan 1 | Percobaan 2  | Percobaan 3  |
+  |---|---|---|---|
+  | Serial | 10998820.698995 µs | 11153728.835983 µs | 11047818.458988 µs  |
+  | Paralel  | 5623697.264993 µs  |  5584505.690989 µs | 5551363.512990 µs|
+- **N = 3000**
+
+  | Tipe  |  Percobaan 1 | Percobaan 2  | Percobaan 3  |
+  |---|---|---|---|
+  | Serial | 338924513.287988 µs  |  337759398.666996 µs |  460236280.571000 µs |
+  | Paralel  | 167446967.266005 µs | 170605410.009011 µs |  166687187.794014 µs|
+
+#### Analisis Perbandingan Kinerja Serial dan Paralel
+- Pada program serial, thread yang dijalankan hanya satu. Pada program paralel, terdapat dua thread yang dijalankan. Seharusnya kecepatan program paralel dua kali lebih cepat daripada program serial.
+- Sesuai dengan hasil percobaan, kecepatan program paralel kurang lebih dua kali lebih cepat daripada program serial.
+
+