Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func getScanner(fp *os.File) *bufio.Scanner {
	scanner := bufio.NewScanner(fp)
	scanner.Split(bufio.ScanWords)
	scanner.Buffer(make([]byte, 500001), 500000)
	return scanner
}

func getNextString(scanner *bufio.Scanner) string {
	scanner.Scan()
	return scanner.Text()
}

func getNextInt(scanner *bufio.Scanner) int {
	i, _ := strconv.Atoi(getNextString(scanner))
	return i
}

func main() {
	fp := os.Stdin
	if len(os.Args) > 1 {
		fp, _ = os.Open(os.Args[1])
	}

	scanner := getScanner(fp)
	writer := bufio.NewWriter(os.Stdout)

	n := getNextInt(scanner)
	m := getNextInt(scanner)
	nodes := make([]Node, n)

	for i := 0; i < n; i++ {
		nodes[i].list = make([]int, 0)
	}

	for i := 0; i < m; i++ {
		s := getNextInt(scanner)
		t := getNextInt(scanner)
		nodes[s].list = append(nodes[s].list, t)
		nodes[t].list = append(nodes[t].list, s)
	}

	c := 1
	for i := 0; i < n; i++ {
		if nodes[i].c == 0 {
			traverse(nodes, i, c)
			c++
		}
	}

	q := getNextInt(scanner)

	for i := 0; i < q; i++ {
		s := getNextInt(scanner)
		t := getNextInt(scanner)
		if nodes[s].c == nodes[t].c {
			fmt.Fprintln(writer, "yes")
			continue
		}
		fmt.Fprintln(writer, "no")
	}

	writer.Flush()
}

// Node ...
type Node struct {
	list []int
	c    int
}

func traverse(nodes []Node, r, c int) {
	nodes[r].c = c
	for _, i := range nodes[r].list {
		if nodes[i].c != 0 {
			continue
		}
		traverse(nodes, i, c)
	}
}

C++: #include<bits/stdc++.h>

using namespace std;
const int maxn=100000+5;

int fa[maxn];
int V,E;
void init(){
    for(int i=1;i<=V;i++)
        fa[i]=i;
}

int find(int x){
    int y=fa[x];
    for(;fa[y]!=y;y=fa[y]);
    while(x!=y){
        int temp=fa[x];
        fa[x]=y;
        x=temp;
    }
    return y;
}

void merge(int x,int y){
    int nx=find(x);
    int ny=find(y);
    if(nx!=ny){
        fa[nx]=ny;
    }
}
int main(){
    cin>>V>>E;
    init();
    while(E--){
        int in,out;
        cin>>in>>out;
        merge(in,out);
    }
    int T;
    cin>>T;
    while(T--){
        int x,y;
        cin>>x>>y;
        if(find(x)!=find(y)) cout<<"no"<<endl;
        else cout<<"yes"<<endl;
    }
}

C++: #include<iostream>
#include<cstring>
using namespace std;

int x[100000][100];
bool y[100000];
int z[100000];

int main(){
	int n,m,a,b,q;
	cin>>n>>m;
	for(int i=0;i<m;i++){
		cin>>a>>b;
		x[a][z[a]]=b;
		x[b][z[b]]=a;
		z[a]++;
		z[b]++;
	}
	cin>>q;
	for(int h=0;h<q;h++){
		cin>>a>>b;
		memset(y,0,sizeof(y));
		y[a]=true;
		for(int i=0;i<20;i++){
			for(int j=0;j<n;j++){
				if(y[j]==true){
					for(int k=0;k<z[j];k++){
						y[x[j][k]]=true;
					}
				}
				if(y[b]==true){
					cout<<"yes"<<endl;
					goto Exit;
				}
			}
		}
		cout<<"no"<<endl;
		Exit:;
	}
	return 0;
}

C++: #include<iostream>
using namespace std;

void boo(int b[], int y[], int w, int m){
	for(int i = 0; i < m; i++){
		if(b[i] == w) {
			if(y[b[i + m]] != -1)
				y[b[i + m]] = 1;
		}
	}
	for(int i = m; i < m * 2; i++){
		if(b[i] == w) {
			if(y[b[i - m]] != -1)
				y[b[i - m]] = 1;
		}
	}
}

int foo(int a, int s, int b[], int m, int n){
	int z = 0, y[100100] = {}, k = 1;
	y[a] = 1;
	while(k){
		k = 0;
		for(int i = 0; i < n; i++){
			if(y[i] == 1){ 
				if(i == s){
					z = 1;
					k = 0;
					break;
				}
				k = 1;
				y[i] = -1;
				boo(b, y, i, m);
				
				
			}
		}
	}
	return z;
	
}


int main(){
	int b[200100];
	int n, m, q, a, s;
	int i, j, k;
	cin>>n>>m;
	for(i = 0; i < m; i++){
		cin>>b[i]>>b[m + i];
	}

	cin>>q;

	for(i = 0; i < q; i++){
		cin>>a>>s;
		if(foo(a, s, b, m, n) == 1){
			cout<<"yes"<<endl;
		} else {
			cout<<"no"<<endl;
		}
	}
	
	return 0;
}