Language: Java

import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;
// ?????£?????????????§£O(|V| + |E|)
public class StronglyConnectedComponent {
  int V;
  List<List<Integer>> G; // ??°???????????£??\???????????¨???
  List<List<Integer>> rG; // ?????????????????????????????°??????
  List<Integer> vs; //?????°?????????????????????
  boolean[] used; // ?????§???????????????
  public int[] cmp; //???Main??§????????¨.?±????????????£?????????????????????????????????
  
  public StronglyConnectedComponent(int n) {
    V = n;
    G = new ArrayList<List<Integer>>(n);
    rG = new ArrayList<List<Integer>>(n);
    vs = new ArrayList<Integer>();
    used = new boolean[n];
    cmp = new int[n];
    for(int i = 0; i < n; i++) {
      G.add(new ArrayList<Integer>());
      rG.add(new ArrayList<Integer>());
    }
  }
  
  public void addEdge(int from, int to) {
    G.get(from).add(to);
    rG.get(to).add(from);
  }
  
  private void dfs(int v) {
    used[v] = true; 

    for(int i = 0; i < G.get(v).size(); i++) {
      if(!used[G.get(v).get(i)]) dfs(G.get(v).get(i));
    }
    // ??°??????????????§??????
    vs.add(v);
  }
  
  private void rdfs(int v, int k) {
    used[v] = true;
    cmp[v] = k;
    for(int i = 0; i < rG.get(v).size(); i++) {
      if(!used[rG.get(v).get(i)]) rdfs(rG.get(v).get(i), k);
    }
  }
  
  public int scc() { 
    // ???1????????????
    for(int i = 0; i < V; i++) {
      used[i] = false;
    }
    vs.clear();
    // (2????????????????¨?????????????????§??????¨????????±???????????¢?´¢??????????????°??????????????§??????????????????????????¨??????????¨??????????????????????????????§ ??°??????????????????????????????????????????    
    for(int i = 0; i < V; i++) {
      if(!used[i]) dfs(i);
    }
    //??????3?????????????????????.
    for(int i = 0; i < V; i++) {
      used[i] = false;
    }
    // ???4???????????°?????????????????°??????????????????????¨???§?????????????????? ???????????????????¨?????????????????§??????¨???????????±???????????¢?´¢?????° ??????????????????
    //    ????????¨???????????????????????±???????????¢?´¢??§??????????????? ??????????????????1???????????£???????????¨?????£?????????
    int k = 0;  
    // ????????§1 ????????? DFS ??§??°????????????????????????????????????????????¨??????used?????????????????±??????????????????
    for(int i = vs.size() - 1; i >= 0; i--) {
      if(!used[vs.get(i)]) rdfs(vs.get(i), k++);
    }
    return k;
  }
}
public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int e = sc.nextInt();
    StronglyConnectedComponent scc = new StronglyConnectedComponent(n);
    for(int i = 0; i < e; i++) {
      int s = sc.nextInt();
      int t = sc.nextInt();
      scc.addEdge(s, t);
    }
    scc.scc();
    int q = sc.nextInt();
    for(int i = 0; i < q; i++) {
      int s = sc.nextInt();
      int t = sc.nextInt();
      if(scc.cmp[s] == scc.cmp[t]) {
        System.out.println(1);
      }
      else{
        System.out.println(0);
      }
    }
  }
}

Compiler output:
Main.java:6: error: class StronglyConnectedComponent is public, should be declared in a file named StronglyConnectedComponent.java
public class StronglyConnectedComponent {
       ^
1 error