def is_connected(comp):
    """
    Return true if a component is connected, False otherwise:
    :param comp:
    :return:
    """
    set_comp = {}
    node_to_id_comp = {}
    for l in comp.links:
        _, _, u, v = l
        if u in node_to_id_comp and v in node_to_id_comp:
            id_u_comp = node_to_id_comp[u]
            id_v_comp = node_to_id_comp[v]
            if id_u_comp != id_v_comp:
                u_comp = set_comp[id_u_comp]
                v_comp = set_comp[id_v_comp]
                u_comp |= v_comp
                for n in v_comp:
                    node_to_id_comp[n] = id_u_comp
                set_comp[id_v_comp] = None
        elif u in node_to_id_comp and v not in node_to_id_comp:
            id_u_comp = node_to_id_comp[u]
            u_comp = set_comp[id_u_comp]
            node_to_id_comp[v] = id_u_comp
            u_comp.add(v)
        elif u not in node_to_id_comp and v in node_to_id_comp:
            id_v_comp = node_to_id_comp[v]
            v_comp = set_comp[id_v_comp]
            node_to_id_comp[u] = id_v_comp
            v_comp.add(u)
        else:
            new_comp = set([u, v])
            node_to_id_comp[u], node_to_id_comp[v] = len(set_comp), len(
                set_comp)
            set_comp[len(set_comp)] = new_comp
    if sum([(1) for c in set_comp if set_comp[c] is not None]) == 1:
        return True
    return False
