diff --git a/DisjointSet.java b/DisjointSet.java
new file mode 100644
index 0000000..703c433
--- /dev/null
+++ b/DisjointSet.java
@@ -0,0 +1,98 @@
+// Java Program for union-find algorithm to detect cycle in a graph
+import java.util.*;
+import java.lang.*;
+import java.io.*;
+ 
+class Graph
+{
+    int V, E;    // V-> no. of vertices & E->no.of edges
+    Edge edge[]; // /collection of all edges
+ 
+    class Edge
+    {
+        int src, dest;
+    };
+ 
+    // Creates a graph with V vertices and E edges
+    Graph(int v,int e)
+    {
+        V = v;
+        E = e;
+        edge = new Edge[E];
+        for (int i=0; i<e; ++i)
+            edge[i] = new Edge();
+    }
+ 
+    // A utility function to find the subset of an element i
+    int find(int parent[], int i)
+    {
+        if (parent[i] == -1)
+            return i;
+        return find(parent, parent[i]);
+    }
+ 
+    // A utility function to do union of two subsets
+    void Union(int parent[], int x, int y)
+    {
+        int xset = find(parent, x);
+        int yset = find(parent, y);
+        parent[xset] = yset;
+    }
+ 
+ 
+    // The main function to check whether a given graph
+    // contains cycle or not
+    int isCycle( Graph graph)
+    {
+        // Allocate memory for creating V subsets
+        int parent[] = new int[graph.V];
+ 
+        // Initialize all subsets as single element sets
+        for (int i=0; i<graph.V; ++i)
+            parent[i]=-1;
+ 
+        // Iterate through all edges of graph, find subset of both
+        // vertices of every edge, if both subsets are same, then
+        // there is cycle in graph.
+        for (int i = 0; i < graph.E; ++i)
+        {
+            int x = graph.find(parent, graph.edge[i].src);
+            int y = graph.find(parent, graph.edge[i].dest);
+ 
+            if (x == y)
+                return 1;
+ 
+            graph.Union(parent, x, y);
+        }
+        return 0;
+    }
+ 
+    // Driver Method
+    public static void main (String[] args)
+    {
+        /* Let us create following graph
+         0
+        |  \
+        |    \
+        1-----2 */
+        int V = 3, E = 3;
+        Graph graph = new Graph(V, E);
+ 
+        // add edge 0-1
+        graph.edge[0].src = 0;
+        graph.edge[0].dest = 1;
+ 
+        // add edge 1-2
+        graph.edge[1].src = 1;
+        graph.edge[1].dest = 2;
+ 
+        // add edge 0-2
+        graph.edge[2].src = 0;
+        graph.edge[2].dest = 2;
+ 
+        if (graph.isCycle(graph)==1)
+            System.out.println( "graph contains cycle" );
+        else
+            System.out.println( "graph doesn't contain cycle" );
+    }
+}
\ No newline at end of file