Submission #1326766

#TimeUsernameProblemLanguageResultExecution timeMemory
1326766i_am_blindfoldSenior Postmen (BOI14_postmen)C++20
100 / 100
322 ms72460 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 5e5 + 5;

vector<pair<int, int>> adj[N];
vector<int> vis(N, 0);
vector<int> lst(N, - 1);
vector<int> path;

void dfs(int u) {
    while (!adj[u].empty()) {
        auto [v, i] = adj[u].back();
        adj[u].pop_back();
        if (vis[i]) continue;
        vis[i] = 1;
        dfs(v);
    }
    path.push_back(u);
}

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

    int n, m;
    cin >> n >> m;

    for (int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
        adj[a].push_back({b, i});
        adj[b].push_back({a, i});
    }

    dfs(1);

    reverse(path.begin(), path.end());
    vector<int> cur;
    for (int i = 0; i < (int)path.size(); i++) {
        if (lst[path[i]] == - 1) {
            cur.push_back(path[i]);
            lst[path[i]] = 1;
        } else {
            vector<int> op;
            while (cur.back() != path[i]) {
                op.push_back(cur.back());
                lst[cur.back()] = - 1;
                cur.pop_back();
            }
            op.push_back(path[i]);
            reverse(op.begin(), op.end());
            for (int &j: op) {
                cout << j << ' ';
            }
            cout << '\n';
        }
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...