• + 1 comment

    Can anyone help me with this ?

    I am getting 5 testcases wrong. Is it only because of the precision or something else?

    import java.io.*;
    import java.util.*;
    import java.text.*;
    import java.math.*;
    import java.util.regex.*;
    
    public class graph {
    
        int n,e;
        HashMap<Integer,ArrayList<Integer>> list = new HashMap();
        boolean v[];
      static  int distance[];
        
        //Constructor takes input
        graph(){
           
           n = i();      //no of nodes 
           e = n-1;      //no of egdes
           
           
           for(int i=1;i<=n;i++)
           list.put(i,new ArrayList());    
               
               for(int i=0;i<e;i++)               //creating adjacency list
           {
                int a = i();
                int b = i();
               
                list.get(a).add(b);
                list.get(b).add(a);
           }
           
           v = new boolean[n+1];
           cl = new int[n+1];
           distance=new int[n+1]; 
           distance[0]=0; 
        }
        
        public int dfs(int root)
        {
            v[root] = true;
            ArrayList<Integer> ar = list.get(root);
            int c=1;
            for(int i=0;i<ar.size();i++)
            {
                int node = ar.get(i);
                
                
                if(!v[node])      // if element is not visited
                {
                    distance[node]=distance[root]+1;
                    c+=dfs(node);
                }
            }
            cl[root]=c;
            return c;
        }
        
        static int cl[];    
        
        public static void main(String[] args) {
            
           PrintWriter out=new PrintWriter(System.out); 
           graph g = new graph();
           int root = 1;
           g.dfs(root);
            
           double dd = 0.0d;
           double totaldist=0.0d;
            
           for(int i=2;i<=g.n;i++)
           {
               //System.out.println(i+" "+g.cl[i]+" "+distance[i]);
               dd += (g.n-g.cl[i])*distance[i];
               totaldist+=distance[i];
           }
           
             
            // out.printf("%.14f\n", dd/totaldist);
             System.out.print(dd/totaldist); 
         //  System.out.print(dd/(g.n-1));
        }
        
        
       static Scanner sc = new Scanner(System.in);
      
       static long l(){
            return sc.nextLong();
        }
        static int i(){
            return sc.nextInt();
        }
        static String s(){
            return sc.nextLine();
    }
    }