Submission #31478

#TimeUsernameProblemLanguageResultExecution timeMemory
31478user202729Senior Postmen (BOI14_postmen)C++14
38 / 100
732 ms7028 KiB
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr);

    int nvertex, nedge;
    std::cin >> nvertex >> nedge;
    std::vector<std::vector<int>> adjlist (nvertex);
    for (int i = 0; i < nedge; ++i) {
        int u, v;
        std::cin >> u >> v;
        adjlist[--u].push_back(--v);
        adjlist[v].push_back(u);
    }

//    std::cout << "------------\n";

    std::vector<int> passedvertices;
    std::vector<char> passedp (nvertex, false);
    for (int vertex = 0; vertex < nvertex; ++vertex) {
//        std::cout << "vertex = " << vertex << '\n';
        while (!adjlist[vertex].empty()) {
            passedvertices.push_back(vertex);
            passedp[vertex] = true;
            while ((!passedvertices.empty()) && !adjlist[passedvertices.back()].empty()) {
                int nextvertex = adjlist[passedvertices.back()].back();
//                std::cout << "nextvertex = " << nextvertex << '\n';
                adjlist[passedvertices.back()].pop_back();
                adjlist[nextvertex].erase(
                    std::remove(adjlist[nextvertex].begin(), adjlist[nextvertex].end(), passedvertices.back()),
                    adjlist[nextvertex].end()
                );

                if (passedp[nextvertex]) {
//                    std::cout << "Cycle :\n";
                    do {
                        std::cout << 1+passedvertices.back() << ' ';
                        passedp[passedvertices.back()] = false; passedvertices.pop_back();
                    } while (passedvertices.back() != nextvertex);
                    std::cout << 1+nextvertex << '\n';
                } else {
                    passedvertices.push_back(nextvertex);
                    passedp[nextvertex] = true;
                }
            }
//            if ((!passedvertices.empty()) && adjlist[passedvertices.back()].empty()) {
//                std::cout << "error\n";
//                for (int i : passedvertices) std::cout << i << ' ';
//                std::cout << '\n';
//                while (true);
//            }
//            else std::cout << "****\n";
        }
    }
}
/*
10 15
1 3
5 1
2 3
9 2
3 4
6 3
4 5
7 4
4 8
5 7
8 5
6 7
7 8
8 10
10 9
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...