Permutation Cycles June 18, 2019 https://www.acmicpc.net/problem/10451 Source FOR(i, m_N){ usi::iterator it = m_usiPerm.find(i+1); if(it == m_usiPerm.end()){ continue; } m_usiPerm.erase(it); if (m_viPerm.at(i) == i+1){ cycleCnt++; } else{ int nodeFrom = i+1; int nodeTo = m_viPerm.at(nodeFrom-1); while(nodeTo != (i+1)){ usi::iterator delit = m_usiPerm.find(nodeTo); if(W_IFNOT(delit != m_usiPerm.end())); else { break; } m_usiPerm.erase(delit); nodeFrom = nodeTo; nodeTo = m_viPerm.at(nodeFrom-1); P_IFNOT(nodeTo <= m_N, nodeTo); } cycleCnt++; } } GitHub PermCycles Share Share on Facebook Tweet Share on Reddit Email Tags STL cpp unordered-set