Codeforces Alyona and the Tree solution in Java

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

import java.util.StringTokenizer;


public class Codeforces358 {

static boolean visited[];
static boolean sad[];
static int va[];
static int count;
static ArrayList<Vertex> l[];
public static void main(String[] args) {
// TODO Auto-generated method stub
MyScanner358 sc=new MyScanner358();
int n=sc.nextInt();
va=new int[n];
visited=new boolean[n];
sad=new boolean[n];

int i;
for(i=0;i<n;i++)
{
va[i]=sc.nextInt();

}
l=  new ArrayList[n];
for(i=0;i<n;i++)
{
l[i]=new ArrayList<Vertex>();
}

for(i=1;i<n;i++)
{
int p=sc.nextInt()-1;
int c=sc.nextInt();
l[i].add(new Vertex(p,c));
l[p].add(new Vertex(i,c));
}


int root=0;


dfs(root,0,l[root]);
count=0;

for(i=0;i<n;i++)
{
if(sad[i])
{
mdfs(i,l[i]);

}
}

System.out.println(count);

}

static void dfs(int v,long dist,ArrayList<Vertex> li)
{
visited[v]=true;
if(dist<0)
dist=0;
for(Vertex d: li)
{
//System.out.println("Checking "+d.p);
if(!visited[d.p])
{
//System.out.println("Entered "+d.p);
if((dist+d.c)>va[d.p])
{
sad[d.p]=true;

//System.out.println("Marked "+d.p);
}
else
{
dfs(d.p,dist+d.c,l[d.p]);
}
}
}
}

static void mdfs(int v,ArrayList<Vertex> li)
{
visited[v]=true;
count++;
for(Vertex d: li)
{
if(!visited[d.p])
{
mdfs(d.p,l[d.p]);
}
}

}
static class Vertex
{
int p;
int c;
Vertex(int p,int c)
{
this.p=p;
this.c=c;

}
}
}

class MyScanner358
{
BufferedReader br;
StringTokenizer st;
MyScanner358()
{
br=new BufferedReader(new InputStreamReader(System.in));
}
String next()
{

while(st==null || !st.hasMoreTokens())
{
try
{
st=new StringTokenizer(br.readLine());
}
catch(Exception e)
{
e.printStackTrace();
}
}
return st.nextToken();

}
int nextInt()
{
return Integer.parseInt(next());
}
long nextLong()
{
return Long.parseLong(next());
}
double nextDouble()
{
return Double.parseDouble(next());
}
String nextLine()
{
String str="";
try
{
str=br.readLine();
}
catch(Exception e)
{
e.printStackTrace();
}
return str;

}
}

Comments

Popular Posts