CHEFDAG, Need help?(SOLVED)

I followed a tutorial here, to solve this question, where given solution is converted into bipartite graph and then calculating min path coverage in DAG.
I followed same approach, and I manually tested it, and it is working fine. but while submitting it, i am getting error.

Can you please check where I am going wrong? It won’t take long to understand this.

``````/* package codechef; // don't place package name! */
``````

import java.util.;
import java.lang.
;
import java.io.*;

/* Name of the class has to be “Main” only if the class is public. */
class Codechef
{

``````public static void main (String[] args) throws java.lang.Exception
{

Scanner in = new Scanner(System.in);
int t = in.nextInt();
while(t-->0){

int n = in.nextInt();
int k = in.nextInt();

int p[][] = new int[k][n];
for(int i=0;i<k;i++){

for(int j=0;j<n;j++){
p[i][j] = in.nextInt();
}

}

HashMap<Integer, HashSet<Integer>> hm = new HashMap<Integer, HashSet<Integer>>();

for(int i=0;i<n;i++){

HashSet<Integer> al = new HashSet<Integer>();

for(int j=0;j<n;j++){
if(i!=j){
}
}
hm.put(i,al);

}

for(int x=0;x<k;x++){

for(int i=0;i<n;i++){

HashSet<Integer> hs = hm.get(p[x][i]-1);

for(int j=i-1;j>=0;j--){
int v = p[x][j]-1;
hs.remove(v);
}

}

}

//removing extra edges
//It is DAG
//we need to calculate min  path coverage with min individual paths total number(longest each path)

//Min path coverage in DAG = maximum bipartite matching
//Each elemtns in arraylist pointing to (+ to +) but change it to (+ to -)

for(int i=0;i<n;i++){
HashSet<Integer> hs = hm.get(i);
HashSet<Integer> hsN = new HashSet<Integer>();

for(int x: hs){
}
hm.put(i,hsN);
}

//bipartite graph created with edges going from positive set to negative set
int parent[] = new int[n];
for(int i=0;i<n;i++){
parent[i]=-1;
}
int minno = 0;
for(int i=0;i<n;i++){
boolean vis[] = new boolean[n];
for(int j=0;j<n;j++){
vis[j]=false;
}
dfs(i,parent,vis,hm);

}

int fromto[] = new int[n];
for(int i=0;i<n;i++){
fromto[i]=0;
}
for(int i=0;i<n;i++){
//System.out.print(parent[i]+" ");
if(parent[i]!=-1)
fromto[parent[i]]=i+1;
else
minno++;
}
System.out.println(minno);
for(int i=0;i<n;i++){
System.out.print(fromto[i]+" ");
}
System.out.println();

}

}

public static boolean dfs(int u, int parent[], boolean vis[], HashMap<Integer, HashSet<Integer>> hm){

HashSet<Integer> hs = hm.get(u);

for(int v: hs){
if(!vis[-v]){
vis[-v]=true;

if(parent[-v]!=-1){
if(dfs(-v,parent,vis,hm)){
parent[-v]=u;
return true;
}
}else{
parent[-v]=u;
return true;
}

}
}
return false;

}
``````

}

I figured it out, There is one little problem in this code, which is

``````if(dfs(parent[-v],parent,vis,hm)){
parent[-v]=u;
return true;
}
``````

That means, we need to call dfs on parent[-v] to reset its edge, while I was resetting at -v. Anyways, I have posted this, in case anyone stuck similarly, this might be one error.