Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Connected Components

Write a program which reads relations in a SNS (Social Network Service), and judges that given pairs of users are reachable each other through the network.

Input

In the first line, two integer $n$ and $m$ are given. $n$ is the number of users in the SNS and $m$ is the number of relations in the SNS. The users in the SNS are identified by IDs $0, 1, ..., n-1$.

In the following $m$ lines, the relations are given. Each relation is given by two integers $s$ and $t$ that represents $s$ and $t$ are friends (and reachable each other).

In the next line, the number of queries $q$ is given. In the following $q$ lines, $q$ queries are given respectively. Each query consists of two integers $s$ and $t$ separated by a space character.

Output

For each query, print "yes" if $t$ is reachable from $s$ through the social network, "no" otherwise.

Constraints

$2 \leq n \leq 100,000$

$0 \leq m \leq 100,000$

$1 \leq q \leq 10,000$

Sample Input

10 9
0 1
0 2
3 4
5 7
5 6
6 7
6 8
7 8
8 9
3
0 1
5 9
1 3

Sample Output

yes
yes
no

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
	public static void main(String[] wjy) {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		Graph g= new Graph(a);
		int b = sc.nextInt();
		//System.out.println(b);
		for (int i =0;i<b;i++) {
			g.setEdge(sc.nextInt(), sc.nextInt());
		}
		g.display();
		int c = sc.nextInt();
		//System.out.println(c);
		//String[] st = new String[c];
		for (int j =0;j<c;j++) {
			String reach = g.Reachiable(sc.nextInt(), sc.nextInt());
			System.out.println(reach);
		}
		//for (String str:st) {
		//	System.out.println(str);
		//}
		sc.close();
	}
	static class Graph {
		private int numEdge;
		private int[][] matrix;
		public Graph(int n) {
			this.matrix = new int[n][n];
			this.numEdge =0;
		}
		
		public int v() {
			return this.matrix.length;
		}
		
		public int e() {
			return this.numEdge;
		}
		
		public void setEdge(int i,int j) {
			this.matrix[i][j]=1;
			//this.matrix[j][i]=1;
			this.numEdge++;
		}
		
		public void delEdge(int i,int j) {
			this.matrix[i][j]=0;
			this.numEdge--;
		}
		
		public ArrayList<Integer> getAdjecent(int ve){
			ArrayList<Integer> adj = new ArrayList<Integer>();
			for (int i =0;i<this.v();i++) {
				if (this.matrix[ve][i]==1) {
					adj.add(i);
				}
			}
			return adj;
		}
		public void display() {
			System.out.print(" ");
			for (int i=0; i<this.v();i++) {
				System.out.print(" "+(i));
			}
			System.out.println();
			for (int i=0;i<this.v();i++) {
				System.out.print((i)+" ");
				for (int j=0;j<this.v();j++) {
					System.out.print(this.matrix[i][j]+" ");
				}
				System.out.println();
			}
		}
		
		public String Reachiable(int v1,int v2) {
			if (this.getAdjecent(v1).isEmpty()) {
				return "no";
			}
			else {
				if (this.getAdjecent(v1).contains(v2)) {
					return "yes";
				}
				else {
					for (int i: this.getAdjecent(v1)) {
						 String k =Reachiable(i,v2);
						 if (k.equals("yes")) {
							 return "yes";
						 }
					}
					return "no";
				}
			}
		}
	}
}