제출 #928599

#제출 시각아이디문제언어결과실행 시간메모리
928599tomb어르신 집배원 (BOI14_postmen)C++17
55 / 100
1014 ms130880 KiB
#include<bits/stdc++.h>
using namespace std;
#define MAXN (int) 5e5
#define ll long long
#define pb push_back
#define eb emplace_back
#define pil pair<int, ll>
#define pli pair<ll, int>
#define pll pair<ll, ll>
#define vpli vector<pli>
#define vpil vector<pil>
#define vpll vector<pll>
#define pii pair<int, int>
#define vpii vector<pii>
#define vi vector<int>
#define vvi vector<vi>

unordered_set<int> adj[MAXN];

int main(){
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < m; i++){
        int u, v;
        cin >> u >> v;
        u--,v--;
        adj[u].insert(v);
        adj[v].insert(u);
    }



    stack<int> st;
    st.push(0);
    vvi paths;
    // vi path;
    vi vis;
    unordered_map<int, int> vis_idx;
    while (st.size()){
        int u = st.top();

        // if (vis.size() && u == vis.front())
        // {
        //     // reverse(vis.begin(), vis.end());
        //     paths.pb(vis);
        //     vis.clear();
        // }
        if (vis_idx.count(u) && vis_idx[u] != -1){
            vi path;
            while (vis.size() && vis.back() != u){
                path.pb(vis.back());
                vis_idx[vis.back()] = -1;
                vis.pop_back();
            }
            path.pb(u);
            reverse(path.begin(), path.end());
            paths.pb(path);
            if (vis.size()) vis.pop_back();
        }
        

        if (adj[u].size()){
            vis.pb(u);
            vis_idx[u] = vis.size() - 1;
            auto v = adj[u].begin();
            st.push(*v);
            adj[*v].erase(u);
            adj[u].erase(*v);
        }
        else {
            st.pop();
            // path.pb(u);
        }
    }
    // cout << "ans: " << endl;
    for (auto p : paths){
        if (p.size() == 1) continue;
        for (int i : p) cout << i + 1 << " ";
        cout << endl;
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...