0323: Number of Connected Components in an Undirected Graph

from collections import deque

class Solution:
    def countComponents(self, n, edges):
	    
        G = {ix: [] for ix in range(n)}
        
        for uv in edges:
            u, v = uv[0], uv[1]
            G[u].append(v)
            G[v].append(u)
	    
        def bfs(init, vset):
            vset.add(init)
            dq = deque([init])
            while dq:
                curr = dq.popleft()
                for adj in G[curr]:
                    if adj not in vset:
                        vset.add(adj)
                        dq.append(adj)
        
        count = 0
        cache = set()
        for ix in range(n):
            if ix not in cache:
                bfs(ix, cache)
                count = count + 1
        
        return count