Codeforces B - Mike and Shortcuts Solution
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
public class Div361 {
static int dist[];
static int n;
static boolean v[];
static int a[];
public static void main(String[] args)
{
// TODO Auto-generated method stub
MyScannerdiv361 sc=new MyScannerdiv361();
n=sc.nextInt();
dist=new int[n+1];
v=new boolean[n+1];
Arrays.fill(dist,-1);
int i;
a=new int[n+1];
for(i=1;i<=n;i++){
a[i]=sc.nextInt();
}
bfs(1);
for(i=1;i<=n;i++)
System.out.print(dist[i]+" ");
}
public static void bfs(int r)
{
v[r]=true;
dist[r]=0;
//System.out.println("dist="+dist[r]);
LinkedList<Integer> l=new LinkedList<Integer>();
l.add(r);
while(!l.isEmpty())
{
Integer num=l.poll();
//System.out.println("n="+num);
Integer ar[]={num-1,num+1,a[num]};
for(Integer va:ar)
{
//System.out.println("va="+va);
if(va>=1 && va<=n && !v[va])
{
dist[va]=dist[num]+1;
//System.out.println("dist="+dist[va]);
v[va]=true;
l.add(va);
}
}
}
}
}
class MyScannerdiv361
{
BufferedReader br;
StringTokenizer st;
MyScannerdiv361()
{
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;
}
}
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
public class Div361 {
static int dist[];
static int n;
static boolean v[];
static int a[];
public static void main(String[] args)
{
// TODO Auto-generated method stub
MyScannerdiv361 sc=new MyScannerdiv361();
n=sc.nextInt();
dist=new int[n+1];
v=new boolean[n+1];
Arrays.fill(dist,-1);
int i;
a=new int[n+1];
for(i=1;i<=n;i++){
a[i]=sc.nextInt();
}
bfs(1);
for(i=1;i<=n;i++)
System.out.print(dist[i]+" ");
}
public static void bfs(int r)
{
v[r]=true;
dist[r]=0;
//System.out.println("dist="+dist[r]);
LinkedList<Integer> l=new LinkedList<Integer>();
l.add(r);
while(!l.isEmpty())
{
Integer num=l.poll();
//System.out.println("n="+num);
Integer ar[]={num-1,num+1,a[num]};
for(Integer va:ar)
{
//System.out.println("va="+va);
if(va>=1 && va<=n && !v[va])
{
dist[va]=dist[num]+1;
//System.out.println("dist="+dist[va]);
v[va]=true;
l.add(va);
}
}
}
}
}
class MyScannerdiv361
{
BufferedReader br;
StringTokenizer st;
MyScannerdiv361()
{
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
Post a Comment