// File: /workspace/github_cpp_makefile_star2_O2/fjamour[P]icentral/src/qube.cc
// Function: graph_t::find_mucs_fast()
void graph_t::find_mucs_fast()
{
    //1. find bridges
    //2. delete bridges
    //3. find connected components of size >=3 (these are MUCs)
    vector<edge_t> bridge_vec;
    find_bridge_edges(bridge_vec);
    graph_hash_t gh;
//    printf("DBG filling graph hash...\n");
    gh.fill_graph(*this);
//    printf("DBG removing bridges...\n");
    for(int i = 0; i < bridge_vec.size(); ++i) {
        edge_t e = bridge_vec[i];
        gh.remove_edge(e.first, e.second);
    }
    vector<graph_hash_t> conn_comp_vec;
//    printf("DBG finding connected components...\n");
    gh.find_conn_comp(conn_comp_vec);
//    printf("DBG constructing MUCs...\n");
    for(int i = 0; i < conn_comp_vec.size(); ++i) {
        if(conn_comp_vec[i].size() >= 3) {
            muc_t muc;
            muc.id = muc_vec.size();
            muc.muc_subgraph = conn_comp_vec[i];
            graph_hash_t::nodes_map_t::iterator it;
            it = muc.muc_subgraph.nodes_map.begin();
            for(; it != muc.muc_subgraph.nodes_map.end(); ++it) {
                node_id_t v = it->first;
                node_to_muc_vec[v] = muc.id;
            }
            muc_vec.push_back(muc);
        }
    }
//    printf("DBG constructing single node MUCs...\n");
    //print_mucs();
    //create single vertex muc's
    for(node_id_t i = 0; i < node_to_muc_vec.size(); ++i) {
        if(node_to_muc_vec[i] == INF) {
            muc_t muc;
            muc.id = muc_vec.size();
            muc.muc_subgraph.insert_node(i);
            node_to_muc_vec[i] = muc.id;
            muc_vec.push_back(muc);
        }
    }
//    printf("DBG finding connection vertices...\n");
    find_conn_verts();
    
    //find the disconnected subgraphs that will result from the deletion of
    //connection vertices
//    printf("DBG finding MUC subgraphs...\n");
    for(muc_id_t m = 0; m < muc_vec.size(); ++m) {
        find_muc_subgraphs(m);
    }
//    printf("DBG DONE!...\n");
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x858, %rsp            # imm = 0x858
movq %rdi, %rbx
xorps %xmm0, %xmm0
leaq 0x30(%rsp), %rsi
movaps %xmm0, (%rsi)
andq $0x0, 0x10(%rsi)
callq 0x1135e
leaq 0x48(%rsp), %rdi
callq 0x11468
leaq 0x48(%rsp), %rdi
movq %rbx, %rsi
callq 0x17db0
xorl %r15d, %r15d
leaq 0x48(%rsp), %r14
movq 0x30(%rsp), %rax
movq 0x38(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r15, %rcx
jbe 0x1f9c8
movl (%rax,%r15,8), %esi
movl 0x4(%rax,%r15,8), %edx
movq %r14, %rdi
callq 0x1762e
incq %r15
jmp 0x1f99c
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %rsi
movaps %xmm0, (%rsi)
andq $0x0, 0x10(%rsi)
leaq 0x48(%rsp), %rdi
callq 0x17a58
leaq 0x60(%rbx), %r14
xorl %esi, %esi
leaq 0x2f0(%rsp), %r12
movq %rsp, %r13
movq %r14, 0x28(%rsp)
movq 0x10(%rsp), %rdi
movq 0x18(%rsp), %rax
subq %rdi, %rax
cqto
movl $0x2a8, %ecx            # imm = 0x2A8
idivq %rcx
cmpq %rsi, %rax
jbe 0x1fadc
movq %rsi, %r15
imulq $0x2a8, %rsi, %rbp      # imm = 0x2A8
addq %rbp, %rdi
callq 0x176f6
cmpq $0x3, %rax
jb 0x1fad1
movq %r12, %rdi
callq 0x1f76c
movq 0x68(%rbx), %rax
subq 0x60(%rbx), %rax
cqto
movl $0x568, %ecx            # imm = 0x568
idivq %rcx
movl %eax, 0x5f8(%rsp)
addq 0x10(%rsp), %rbp
leaq 0x350(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
callq 0x22c42
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq %r14, %rdi
callq 0xb11c
movq %rax, (%rsp)
movq %rdx, 0x8(%rsp)
movq 0x28(%rsp), %r14
movq 0x358(%rsp), %rcx
movq 0x360(%rsp), %rdx
cmpq (%rcx,%rdx,8), %rax
je 0x1fabe
movl (%rax), %eax
movl 0x5f8(%rsp), %ecx
movq 0x18(%rbx), %rdx
movl %ecx, (%rdx,%rax,4)
movq %r13, %rdi
callq 0xbdd6
movq (%rsp), %rax
jmp 0x1fa8a
movq %r14, %rdi
movq %r12, %rsi
callq 0x22d34
movq %r12, %rdi
callq 0x1d5de
movq %r15, %rsi
incq %rsi
jmp 0x1f9f8
xorl %r15d, %r15d
leaq 0x350(%rsp), %r12
leaq 0x2f0(%rsp), %r13
movl $0x568, %ebp            # imm = 0x568
movl %r15d, %r15d
movq 0x18(%rbx), %rax
movq 0x20(%rbx), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %r15, %rcx
jbe 0x1fb63
cmpl $0x5f5e100, (%rax,%r15,4) # imm = 0x5F5E100
jne 0x1fb5e
movq %r13, %rdi
callq 0x1f76c
movq 0x68(%rbx), %rax
subq 0x60(%rbx), %rax
cqto
idivq %rbp
movl %eax, 0x5f8(%rsp)
movq %r12, %rdi
movl %r15d, %esi
callq 0x174b0
movl 0x5f8(%rsp), %eax
movq 0x18(%rbx), %rcx
movl %eax, (%rcx,%r15,4)
movq %r14, %rdi
movq %r13, %rsi
callq 0x22d34
movq %r13, %rdi
callq 0x1d5de
incl %r15d
jmp 0x1faf4
movq %rbx, %rdi
callq 0x1fc1c
xorl %ebp, %ebp
movl $0x568, %r14d           # imm = 0x568
movl %ebp, %ecx
movq 0x68(%rbx), %rax
subq 0x60(%rbx), %rax
cqto
idivq %r14
cmpq %rcx, %rax
jbe 0x1fb95
movq %rbx, %rdi
movl %ebp, %esi
callq 0x1fdd0
incl %ebp
jmp 0x1fb73
leaq 0x10(%rsp), %rdi
callq 0x11800
leaq 0x48(%rsp), %rdi
callq 0x1173e
leaq 0x30(%rsp), %rdi
callq 0x16656
addq $0x858, %rsp            # imm = 0x858
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x1fc17
jmp 0x1fbc9
movq %rax, %rbx
jmp 0x1fc05
jmp 0x1fbee
jmp 0x1fbee
jmp 0x1fbdc
jmp 0x1fbdc
jmp 0x1fbee
jmp 0x1fbdc
jmp 0x1fbee
movq %rax, %rbx
leaq 0x2f0(%rsp), %rdi
callq 0x1d5de
jmp 0x1fbf1
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x11800
leaq 0x48(%rsp), %rdi
callq 0x1173e
leaq 0x30(%rsp), %rdi
callq 0x16656
movq %rbx, %rdi
callq 0x23d0
movq %rax, %rbx
jmp 0x1fbfb