diff --git a/(p,t)_sparsification/main.cpp b/(p,t)_sparsification/main.cpp
index dcfb0dd65ccef2992b5f8ad1a53081cd60e7fe55..b4b342b53125528fa344fa4d37473f1d63deb596 100644
--- a/(p,t)_sparsification/main.cpp
+++ b/(p,t)_sparsification/main.cpp
@@ -5,8 +5,7 @@
 #include "io.h"
 #include <string>
 #include "hash.h"
-
-#include <pthread.h>
+#include <omp.h>
 
 
 #define NUM_TRIALS 10
@@ -14,22 +13,11 @@
 using  namespace std;
 namespace po = boost::program_options;
 
-//static void *handler(void *args){
-//    string mode = *(string *) args;
-//    if(mode=="Random"){
-//        g2 = compress_graph_basic(g, var["depth"].as<int>(), var["proportions"].as<vector<double>>(),
-//                                  var["directed"].as<bool>());
-//
-//    }else if(mode=="LP"){
-//        g2 = compress_graph_LP(g, e_s, var["depth"].as<int>(), var["proportions"].as<vector<double>>(),
-//                               var["directed"].as<bool>());
-//    }
-//}
+
 
 int main(int argc, char *argv[]) {
 
     srand((unsigned)time(NULL));
-    pthread_t threads[NUM_TRIALS];
 
     po::options_description desc("Allowed options");
     desc.add_options()
@@ -71,42 +59,49 @@ int main(int argc, char *argv[]) {
     double elapsed_time = 0;
 
     auto[g, e_s] = read_graph_from_file(file_name, var["directed"].as<bool>());
-
+    auto start = chrono::steady_clock::now();
 
     string execMode=var["algorithm"].as<string>();
-    for (int i=0; i<NUM_TRIALS; i++) {
-        auto start = chrono::steady_clock::now();
-//        pthread_create(&threads[i], NULL, handler, NULL);
+
+
+
+
+    #pragma omp parallel for  num_threads(NUM_TRIALS)
+    for (int i = 0; i < NUM_TRIALS; i++) {
+
+        auto start = std::chrono::steady_clock::now();
+
         if (execMode == "Random") {
-            g2 = compress_graph_basic(g, var["depth"].as<int>(), var["proportions"].as<vector<double>>(),
+            g2 = compress_graph_basic(g, var["depth"].as<int>(), var["proportions"].as<std::vector<double>>(),
                                       var["directed"].as<bool>());
 
         } else if (execMode == "LP") {
-            g2 = compress_graph_LP(g, e_s, var["depth"].as<int>(), var["proportions"].as<vector<double>>(),
+            g2 = compress_graph_LP(g, e_s, var["depth"].as<int>(), var["proportions"].as<std::vector<double>>(),
                                    var["directed"].as<bool>());
 
         } else if (execMode == "SA") {
             g2 = Simulated_annealing(1000, 10, 0.99, g, var["directed"].as<bool>(), var["depth"].as<int>(),
-                                     var["proportions"].as<vector<double>>());
-        }else if (execMode == "Greedy") {
-            g2 = compress_graph_greedy(g, var["depth"].as<int>(), var["proportions"].as<vector<double>>(),
+                                     var["proportions"].as<std::vector<double>>());
+        } else if (execMode == "Greedy") {
+            g2 = compress_graph_greedy(g, var["depth"].as<int>(), var["proportions"].as<std::vector<double>>(),
                                        var["directed"].as<bool>());
 
         }
 
-        auto finish = chrono::steady_clock::now();
-        vector<edge> edges_original = get_edges(g, var["directed"].as<bool>());
-        edges_compressed += get_edges(g2, var["directed"].as<bool>()).size();
+        auto finish = std::chrono::steady_clock::now();
 
-        elapsed_time += chrono::duration_cast<chrono::duration<double>>(finish - start).count();
-//        compression_rate = ((double) (edges_original.size() - edges_compressed.size()) /
-//                            edges_original.size());
-//        c.push_back(compression_rate);
-//        s.push_back(edges_compressed);
+        // Update edges_compressed and elapsed_time in a thread-safe manner
+        #pragma omp critical
+        {
+            vector<edge> edges_original = get_edges(g, var["directed"].as<bool>());
+            edges_compressed += get_edges(g2, var["directed"].as<bool>()).size();
+            elapsed_time += std::chrono::duration_cast<std::chrono::duration<double>>(finish - start).count();
+        }
 
     }
 
-    //graph_to_file(var, elapsed_time, compression_rate, edges_compressed);
+
+//    graph_to_file(var, elapsed_time, compression_rate, edges_compressed);
 //    cout << "compression rate: " << compression_rate << endl;
     cout <<endl << "compression time: " << elapsed_time/NUM_TRIALS << endl;
     cout << "Average of compressed edges: " << edges_compressed/NUM_TRIALS;