// File: fjamour[P]icentral/src/subgraph_t.cc
// Function: subgraph_t::conn_comp_sizes(std::vector<int, std::allocator<int>>&)
void subgraph_t::conn_comp_sizes(vector<int>& out_vec)
{
    out_vec.clear();
    vector<bool> visited_vec;
    i_fill_map<bool>(visited_vec, false);
    for(int n_id = 0; n_id < visited_vec.size(); ++n_id) {
        if(!visited_vec[n_id]) {
            node_id_t s = n_id;
            visited_vec[n_id] = true;
            out_vec.push_back(1);
            //do a BFS from s, count the number of vertices, and mark the visited
            queue<node_id_t> q;
            q.push(s);
            while(!q.empty()) {
                node_id_t node = q.front(); q.pop();
                vector<node_id_t> nbr_vec = get_nbrs(node);
                for(int i = 0; i < nbr_vec.size(); ++i) {
                    node_id_t nbr = nbr_vec[i];
                    if(!visited_vec[nbr]) {
                        visited_vec[nbr] = true;
                        q.push(nbr);
                        out_vec.back() = out_vec.back()+1;
                    }
                }
            }
        }
    }
}

// Assembly:
subq $0x188, %rsp            # imm = 0x188
movq %rdi, 0x180(%rsp)
movq %rsi, 0x178(%rsp)
movq 0x180(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x178(%rsp), %rdi
callq 0x543e0
leaq 0x150(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0x15640
movq 0x68(%rsp), %rdi
movq 0x70(%rsp), %rsi
xorl %edx, %edx
callq 0x783e0
jmp 0x77726
movl $0x0, 0x140(%rsp)
movslq 0x140(%rsp), %rax
movq %rax, 0x60(%rsp)
leaq 0x150(%rsp), %rdi
callq 0x24de0
movq %rax, %rcx
movq 0x60(%rsp), %rax
cmpq %rcx, %rax
jae 0x77aae
movslq 0x140(%rsp), %rsi
leaq 0x150(%rsp), %rdi
callq 0x10a70
movq %rdx, 0x50(%rsp)
movq %rax, 0x58(%rsp)
jmp 0x7777d
movq 0x50(%rsp), %rax
movq 0x58(%rsp), %rcx
movq %rcx, 0x130(%rsp)
movq %rax, 0x138(%rsp)
leaq 0x130(%rsp), %rdi
callq 0x10c20
xorb $-0x1, %al
testb $0x1, %al
jne 0x777af
jmp 0x77a96
movl 0x140(%rsp), %eax
movl %eax, 0x12c(%rsp)
movslq 0x140(%rsp), %rsi
leaq 0x150(%rsp), %rdi
callq 0x10a70
movq %rdx, 0x40(%rsp)
movq %rax, 0x48(%rsp)
jmp 0x777de
movq 0x40(%rsp), %rax
movq 0x48(%rsp), %rcx
movq %rcx, 0x118(%rsp)
movq %rax, 0x120(%rsp)
leaq 0x118(%rsp), %rdi
movl $0x1, %esi
callq 0x10ad0
movq 0x178(%rsp), %rdi
movl $0x1, 0x114(%rsp)
leaq 0x114(%rsp), %rsi
callq 0x4e1a0
jmp 0x7782c
leaq 0xc0(%rsp), %rdi
callq 0x10580
jmp 0x7783b
leaq 0xc0(%rsp), %rdi
leaq 0x12c(%rsp), %rsi
callq 0x105b0
jmp 0x77852
jmp 0x77854
leaq 0xc0(%rsp), %rdi
callq 0x105e0
movb %al, 0x3f(%rsp)
jmp 0x77867
movb 0x3f(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x77876
jmp 0x77a78
leaq 0xc0(%rsp), %rdi
callq 0x10600
movq %rax, 0x30(%rsp)
jmp 0x7788a
movq 0x30(%rsp), %rax
movl (%rax), %eax
movl %eax, 0xbc(%rsp)
leaq 0xc0(%rsp), %rdi
callq 0x10610
jmp 0x778a7
movq 0x68(%rsp), %rdi
movl 0xbc(%rsp), %esi
callq 0x76f50
movq %rax, %rsi
leaq 0xa0(%rsp), %rdi
callq 0x10b20
jmp 0x778ca
movl $0x0, 0x9c(%rsp)
movslq 0x9c(%rsp), %rax
movq %rax, 0x28(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x28(%rsp), %rax
cmpq %rcx, %rax
jae 0x77a66
movslq 0x9c(%rsp), %rsi
leaq 0xa0(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x98(%rsp)
movl 0x98(%rsp), %eax
movl %eax, %esi
leaq 0x150(%rsp), %rdi
callq 0x10a70
movq %rdx, 0x18(%rsp)
movq %rax, 0x20(%rsp)
jmp 0x77940
movq 0x18(%rsp), %rax
movq 0x20(%rsp), %rcx
movq %rcx, 0x88(%rsp)
movq %rax, 0x90(%rsp)
leaq 0x88(%rsp), %rdi
callq 0x10c20
xorb $-0x1, %al
testb $0x1, %al
jne 0x77972
jmp 0x77a4e
movl 0x98(%rsp), %eax
movl %eax, %esi
leaq 0x150(%rsp), %rdi
callq 0x10a70
movq %rdx, 0x8(%rsp)
movq %rax, 0x10(%rsp)
jmp 0x77994
movq 0x8(%rsp), %rax
movq 0x10(%rsp), %rcx
movq %rcx, 0x78(%rsp)
movq %rax, 0x80(%rsp)
leaq 0x78(%rsp), %rdi
movl $0x1, %esi
callq 0x10ad0
leaq 0xc0(%rsp), %rdi
leaq 0x98(%rsp), %rsi
callq 0x105b0
jmp 0x779d1
movq 0x178(%rsp), %rdi
callq 0x4e210
movl (%rax), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
movq 0x178(%rsp), %rdi
callq 0x4e210
movl 0x4(%rsp), %ecx
movl %ecx, (%rax)
jmp 0x77a4e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x148(%rsp)
movl %eax, 0x144(%rsp)
jmp 0x77ac3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x148(%rsp)
movl %eax, 0x144(%rsp)
jmp 0x77a87
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x148(%rsp)
movl %eax, 0x144(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0x10520
jmp 0x77a87
jmp 0x77a50
movl 0x9c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x9c(%rsp)
jmp 0x778d5
leaq 0xa0(%rsp), %rdi
callq 0x10520
jmp 0x77854
leaq 0xc0(%rsp), %rdi
callq 0x10620
jmp 0x77a96
leaq 0xc0(%rsp), %rdi
callq 0x10620
jmp 0x77ac3
jmp 0x77a98
movl 0x140(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x140(%rsp)
jmp 0x77731
leaq 0x150(%rsp), %rdi
callq 0x15650
addq $0x188, %rsp            # imm = 0x188
retq
leaq 0x150(%rsp), %rdi
callq 0x15650
movq 0x148(%rsp), %rdi
callq 0x9cf0
nopl (%rax)