diff --git a/output/serial_3000.txt b/output/serial_3000.txt
new file mode 100644
index 0000000000000000000000000000000000000000..dda418aac285e72304a3dac9c5ea5a76b72a7c18
--- /dev/null
+++ b/output/serial_3000.txt
@@ -0,0 +1,5 @@
+0 1751211162 1280279855 572586368 
+1751211162 0 470931307 1425861770 
+1280279855 470931307 0 1283376996 
+572586368 1425861770 1283376996 0 
+
diff --git a/src/djikstra_paralel b/src/djikstra_paralel
index 43e73dbf217db82995522d5e69bc3a361c091e6e..944cb462fec2563e9c1fb23d3a51b83b0ee28144 100755
Binary files a/src/djikstra_paralel and b/src/djikstra_paralel differ
diff --git a/src/djikstra_paralel.c b/src/djikstra_paralel.c
index ff51b431165d2893bbcc8399bb4a659a6d66e859..db57e2c990140e058f77920e5e495befc2a6080e 100644
--- a/src/djikstra_paralel.c
+++ b/src/djikstra_paralel.c
@@ -172,12 +172,15 @@ int main(int argc, char** argv) {
     for(int j=0;j<num_of_node;j++){ 
         listResultArray[j]=(unsigned long long*)malloc((num_of_node*process_per_host+1)*sizeof(unsigned long long));
     }
+    
         
+    double dijkstra_time = 0.0;
+    double start_time = 0.0;
+
     #pragma omp parallel num_threads(num_of_processors)
     {
         int world_rank = omp_get_thread_num();
-        printf("%d starting\n",world_rank);
-        // double dijkstra_time = 0.0;
+        // printf("%d starting\n",world_rank);
     
         if(world_rank == 0){
             // printf("world_rank = 0\n");    
@@ -185,8 +188,6 @@ int main(int argc, char** argv) {
         }
 
         #pragma omp barrier
-
-        // dijkstra_time -= MPI_Wtime(); 
         // DIJKSTRA
 
         // printf("Process %d array : \n", world_rank);
@@ -197,7 +198,11 @@ int main(int argc, char** argv) {
         tempArray = (unsigned long long *)malloc(num_of_node*sizeof(unsigned long long));
         
 
-        // #pragma omp barrier
+        #pragma omp barrier
+        if(world_rank == 0){
+            start_time = omp_get_wtime(); 
+        }
+
         int count = 0;
         for (int source=process_per_host*world_rank ; source < (process_per_host*world_rank + process_per_host) ; source++){
             // printf("\nprocess, rank %d %d\n", process_per_host, world_rank);
@@ -213,7 +218,7 @@ int main(int argc, char** argv) {
         #pragma omp barrier
         #pragma omp critical
         {
-            printf("%d critical\n",world_rank);
+            // printf("%d critical\n",world_rank);
             for(int i=0;i<process_per_host * num_of_node + 1;i++){
                 // recv_data[world_rank*(1+process_per_host*num_of_node) +i] = resultArray[i];
                 recv_data[world_rank*(1+process_per_host*num_of_node) +i] = listResultArray[world_rank][i];
@@ -228,13 +233,13 @@ int main(int argc, char** argv) {
         free(tempArray);
 
         if(world_rank == 0){
-            printf("\n");
-            for(int i=0;i<(num_of_node*process_per_host*num_of_processors)+num_of_processors;i++){
-                printf("%lld ",recv_data[i]);
-                if((i+1) % (num_of_node+1) == 0 && (i>0) ){
-                    printf("\n");
-                }
-            }
+            // printf("\n");
+            // for(int i=0;i<(num_of_node*process_per_host*num_of_processors)+num_of_processors;i++){
+            //     printf("%lld ",recv_data[i]);
+            //     if((i+1) % (num_of_node+1) == 0 && (i>0) ){
+            //         printf("\n");
+            //     }
+            // }
         }
         // MPI_Gather(resultArray, process_per_host*num_of_node+1, MPI_UNSIGNED_LONG_LONG, recv_data, process_per_host*num_of_node+1, MPI_UNSIGNED_LONG_LONG, 0, MPI_COMM_WORLD);
 
@@ -263,7 +268,7 @@ int main(int argc, char** argv) {
 
     int sisa_source;
     sisa_source = num_of_node % (process_per_host * num_of_processors);
-    printf("\nsisa : %d\n",sisa_source);
+    // printf("\nsisa : %d\n",sisa_source);
     if(num_of_node % num_of_processors != 0){
         unsigned long long* tempArray;
         tempArray = (unsigned long long *)malloc((num_of_node)*sizeof(unsigned long long));
@@ -292,12 +297,13 @@ int main(int argc, char** argv) {
     //     }
     // }
 
-    // MPI_Barrier(MPI_COMM_WORLD);
-    // dijkstra_time += MPI_Wtime();
+    #pragma omp barrier
+    dijkstra_time = omp_get_wtime() - start_time;
     
     // if(world_rank == 0){
         // printf("Time taken %f microsecond\n", dijkstra_time) * 1000000;
-    printArrayTerminal(hasilAkhir, num_of_node);
+    printf("Time taken %f microsecond\n", dijkstra_time * 1000000);
+    // printArrayTerminal(hasilAkhir, num_of_node);
 
     // }
     // FREE
diff --git a/src/djikstra_serial b/src/djikstra_serial
index 2a1527e070cbda48d5eba4532945226a9e2b6009..4498573c3e97549b390496f2491c23bdab16b7eb 100755
Binary files a/src/djikstra_serial and b/src/djikstra_serial differ
diff --git a/src/djikstra_serial.c b/src/djikstra_serial.c
index 0e4bec48167f8b39411e710b8b9035e80b34ae79..9ffab97217fb6b245cca66205f20018adb87a683 100644
--- a/src/djikstra_serial.c
+++ b/src/djikstra_serial.c
@@ -3,6 +3,7 @@
 #include <stdio.h> 
 #include <stdbool.h> 
 #include <time.h>
+#include <omp.h>
 
 int minDistance(unsigned long long dist[], bool sptSet[], int V) 
 { 
@@ -92,8 +93,8 @@ int main(int argc, char** argv)
     int num_of_node = atoi(argv[1]);
 
     unsigned long long **arr;
-    unsigned long long *matrixToArrayResult;
-    matrixToArrayResult = (unsigned long long*) malloc ((num_of_node * num_of_node) * sizeof(unsigned long long));
+    // unsigned long long *matrixToArrayResult;
+    // matrixToArrayResult = (unsigned long long*) malloc ((num_of_node * num_of_node) * sizeof(unsigned long long));
     arr = (unsigned long long **)malloc(num_of_node*sizeof(unsigned long long*));
     for(int j=0;j<num_of_node;j++){ 
         arr[j]=(unsigned long long*)malloc(num_of_node*sizeof(unsigned long long));
@@ -109,16 +110,16 @@ int main(int argc, char** argv)
         resultArray[j]=(unsigned long long*)malloc(num_of_node*sizeof(unsigned long long));
     }
 
-    clock_t start = clock(), diff;
+    double start = omp_get_wtime();
     for(int i=0;i<num_of_node;i++){
         dijkstra(arr, i,num_of_node,tempArray);
         for(int j=0;j<num_of_node;j++){
             resultArray[i][j] = tempArray[j];
         }
     }
-    diff = clock() - start;
-    int msec = diff * 1000000 / CLOCKS_PER_SEC;
-    printf("Time taken %d microsecond\n", msec);
+    double diff = omp_get_wtime() - start;
+    double msec = diff * 1000000;
+    printf("Time taken %f microsecond\n", msec);
     printMatrix(resultArray,num_of_node);