diff --git a/graph/dijkstra.cpp b/graph/dijkstra.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a0c8b1b2ab948548258fe7fa8c89236ad23910d2
--- /dev/null
+++ b/graph/dijkstra.cpp
@@ -0,0 +1,39 @@
+/**
+ * Dijkstra
+ * Complexity (Time): O(|E| + |V| log |V|)
+ * Complexity (Space): O(|E| + |V|)
+ */
+
+int dist[MAX];
+vector<ii> graph[MAX];
+
+// Get shortest distance from o to d
+int dijkstra(int o, int d) {
+  set<ii> pq;
+  int u, v, wt;
+
+  memset(dist, inf, sizeof dist);
+
+  dist[o] = 0;
+  pq.insert(make_pair(0, o));
+
+  while (pq.size() != 0) {
+    u = pq.begin()->second;
+    pq.erase(pq.begin());
+
+    for (auto i : graph[u]) {
+      v = i.first;
+      wt = i.second;
+
+      if (dist[v] > dist[u] + wt) {
+        if (dist[v] != oo)
+          pq.erase(pq.find(make_pair(dist[v], v)));
+
+        dist[v] = dist[u] + wt;
+        pq.insert(make_pair(dist[v], v));
+      }
+    }
+  }
+
+  return dist[d];
+}